csv - 在 Spark 2.0.1 中读写空字符串 ""vs NULL

标签 csv apache-spark

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/

相关文章:

python - 将新行添加到 pyspark Dataframe

hadoop - 在 java 中使用 hiveContext 修复配置单元表

java - 如何用 Java 读取/写入堆外内存?

Java Spark提交: Exception thrown in awaitResult

apache-spark - Spark驱动程序以集群模式登录边缘节点

java - 如何提高将数据库数据写入 CSV 的性能

bash - 在 csv 文件中输出第一个副本

python - 导出 pandas DataFrame 时如何删除列名行?

PHP Laravel 读取 csv

CSV::open#<< (NoMethodError) 的 Ruby 未定义方法 `map'