CSVFileFormat
似乎将空值读取和写入字符串列的空值。我四处搜索,但一直无法找到有关此的明确信息,因此我整理了一个简单的测试。
val df = session.createDataFrame(Seq(
(0, "a"),
(1, "b"),
(2, "c"),
(3, ""),
(4, null)
))
df.coalesce(1).write.mode("overwrite").format("csv")
.option("delimiter", ",")
.option("nullValue", "unknown")
.option("treatEmptyValuesAsNulls", "false")
.save(s"$path/test")
这输出:
0,a
1,b
2,c
3,unknown
4,unknown
因此,它似乎同时处理空字符串和
null
值为 null
.读取带有空引用字符串和空值的 CSV 文件时会发生同样的事情。目前有什么方法可以区别对待这些吗?
最佳答案
仅仅两年半之后,空字符串不再被认为等于 null
感谢 Spark 2.4.0 !见 this commit for a bit of detail关于功能。您的代码将在 2.4.0+ 下按预期运行:
val df = session.createDataFrame(Seq(
(0, "a"),
(1, "b"),
(2, "c"),
(3, ""),
(4, null)
))
df.coalesce(1).write.mode("overwrite").format("csv")
.option("delimiter", ",")
.option("nullValue", "unknown")
.option("treatEmptyValuesAsNulls", "false")
.save(s"$path/test")
结果是:0,a
1,b
2,c
3,
4,unknown
关于csv - 在 Spark 2.0.1 中读写空字符串 ""vs NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41069589/