2017-05-25 43 views
1

我有一个控制分隔文件,我试图将其转换为实木复合格式。然而在该文件中有一个单一的String场“,在它Spark-Scala格式错误的线路问题

阅读像下面的数据:

val dataframe = sparkSession.sqlContext.read 
       .format("com.databricks.spark.csv") 
       .option("delimiter", datasetDelimiter) 
       .option("header", "false") 
       .option("mode","FAILFAST") 
       //.option("mode", "DROPMALFORMED") 
       .option("treatEmptyValuesAsNulls","true") 
       .option("nullValue"," ") 
       .option("ignoreLeadingWhiteSpace", "true") 
       .option("ignoreTrailingWhiteSpace", "true") 
       .schema(schema) 
       .load(fileLocation) 
       dataframe 

正如你可以看到有只在数据和没有封闭的开放式双引号双引号,这是导致畸形行例外。在阅读我已经明确提到的分隔符为U0001。有什么办法来这样的数据,以镶转换,而不会丢失任何数据

+0

我假设这是针对Spark1的? –

+0

为什么你使用CSV格式?为什么不直接用'text'直接分割线? –

回答

1

您可以设置quote选项空字符串

.option("quote", "") 
// or, equivalently, .option("quote", '\u0000') 

这会告诉Spark将"视为任何其他非特殊字符。

(使用Spark 2.1.0测试)

+0

我们正在处理几个文件,并且不可能知道哪些字符不会出现在数据中。 – Mg2729

+0

得到了你 - 结果有更好的选择 - 查看更新的答案 –

+0

@ Mg2729另外,考虑将“转义”选项设置为无问题的东西,否则可能会有其他意外行为。 –