Spark DataFrameWriter在保存时省略了尾部的制表符定界符(Spark 1.6)。

问题描述 投票:0回答:1

我把我的问题留在下面,因为它是最初发布的,以方便未来的开发者遇到这个问题。当我转移到Spark2.0后,这个问题就解决了--也就是说,在没有对我的原始代码进行任何修改的情况下,输出就和我预期的一样。看来是我一开始用的1.6版本在实现上有些差异。

我有一个Spark 1.6的Scala代码,它读取一个TSV(带tab分隔符的CSV)并将其写入TSV输出(不改变输入--只是过滤输入)。

当我使用定界符","时,输出有尾部的逗号。例如,当我使用分隔符", "时,输出有尾部的逗号。

val1, val2, val3,val4,val5

val1, val2, val3,,

但如果我使用tab (\t)作为定界符,输出就不包括尾部的tab。例如(我在这里写的是TAB,其中出现了\t)。

val1 TAB val2 TAB val3 TAB val4 TAB val5

val1 TAB val2 TAB val3  <= **here I expected two more tabs (as with the comma delimiter)**

我还尝试了其他定界符,发现当定界符是一个空白字符时(例如''字符),尾部的定界符就不会出现在输出中。

我想这可能与选项ignoreLeadingWhiteSpace和ignoreTrailingWhiteSpace有关,但在编写时将它们都设置为false也没有帮助。

我的代码是这样的。

val df = sqlContext.read.format("com.databricks.spark.csv").option("delimiter", "\t").load(params.inputPathS3)
df_filtered = df.filter(...)
df_filtered.write.format("com.databricks.spark.csv").option("delimiter", "\t").save(outputPath)

我也试过(就像我上面写的那样)。

df_filtered.write.format("com.databricks.spark.csv").option("delimiter", "\t").option("ignoreLeadingWhiteSpace", "false").option("ignoreTrailingWhiteSpace", "false").save(outputPath)
scala csv apache-spark delimiter
1个回答
0
投票

下面是一个工作实例(用spark 1.6):输入文件(最后有一些尾部的空格)。

1,2,3,,
scala> val df = sqlContext.read.option("ignoreLeadingWhiteSpace", "false").option("ignoreTrailingWhiteSpace", "false").format("com.databricks.spark.csv").option("delimiter", ",").load("path")
df: org.apache.spark.sql.DataFrame = [C0: string, C1: string, C2: string, C3: string, C4: string]

scala> df.show
+---+---+---+---+---+
| C0| C1| C2| C3| C4|
+---+---+---+---+---+
|  1|  2|  3|   |   |
+---+---+---+---+---+


scala> df.write.option("nullValue", "null").option("quoteMode", "ALL").mode("overwrite").format("com.databricks.spark.csv").option("delimiter", "\t").save("path")

scala> sqlContext.read.format("com.databricks.spark.csv").option("delimiter", "\t").load("path").show
+---+---+---+---+---+
| C0| C1| C2| C3| C4|
+---+---+---+---+---+
|  1|  2|  3|   |   |
+---+---+---+---+---+

请参考。这个 在使用databricks cv库进行读取、写入时,所有选项。

© www.soinside.com 2019 - 2024. All rights reserved.