带有选项 "nullvalue" 的 Spark 2.4 CSV 加载问题

Spark 2.4 CSV Load Issue with option "nullvalue"

我们之前使用的是 Spark 2.3,现在使用的是 2.4:

Spark version 2.4.0
Using Scala version 2.11.12 (OpenJDK 64-Bit Server VM, Java 1.8.0_212)

我们在生产中有一段代码 运行 将 csv 文件转换为 parquet 格式。 我们设置的 csv 加载选项之一是 option("nullValue", null)。它在 spark 2.4 中的工作方式有问题。

这是一个说明问题的例子。

  1. 让我们创建以下 /tmp/test.csv 文件:
C0,C1,C2,C3,C4,C5
1,"1234",0.00,"","D",0.00
2,"",0.00,"","D",0.00

  1. 现在如果我们将它加载到 spark-shell
scala> val data1 = spark.read.option("header", "true").option("inferSchema", "true").option("treatEmptyValuesAsNulls","true").option("nullValue", null).csv("file:///tmp/test.csv")

we get an empty row:
scala> data1.show
+----+----+----+----+----+----+
| C0| C1| C2| C3| C4| C5|
+----+----+----+----+----+----+
| 1|1234| 0.0| | D| 0.0|
|null|null|null|null|null|null|
+----+----+----+----+----+----+

  1. 如果我们另外稍微更改 csv(在最后一行用“1”替换空字符串)
C0,C1,C2,C3,C4,C5
1,"1234",0.00,"","D",0.00
2,"",0.00,"1","D",0.00

结果更糟:

scala> val data2 = spark.read.option("header", "true").option("inferSchema", "true").option("treatEmptyValuesAsNulls","true").option("nullValue", null).csv("file:///tmp/test.csv")

scala> data2.show
+----+----+----+----+----+----+
| C0| C1| C2| C3| C4| C5|
+----+----+----+----+----+----+
|null|null|null|null|null|null|
|null|null|null|null|null|null|
+----+----+----+----+----+----+

这是新版spark 2.4.0的bug吗?任何机构面临类似的问题?

spark 选项 emptyValue 已解决问题

val data2 = spark.read.option("header", "true").option("inferSchema", "true").option("treatEmptyValuesAsNulls","true").option("nullValue", null)***.option("emptyValue", null)***.csv("file:///tmp/test.csv")