Csv 加载tempView时,空字符串显示为null

Csv 加载tempView时,空字符串显示为null,csv,apache-spark,testing,apache-spark-sql,Csv,Apache Spark,Testing,Apache Spark Sql,我正在spark中运行一些测试。为此,我加载了一个csv文件来比较我的结果 我的标准具 ;;NULL;2017-03-21 ;;NULL;2017-03-21 ;;NULL;2017-03-21 这就是我加载文件的方式 spark.read.schema(Table.schema) .format("com.databricks.spark.csv") .option("delimiter", ";") .option("nullValue", "NULL"

我正在spark中运行一些测试。为此,我加载了一个csv文件来比较我的结果

我的标准具

;;NULL;2017-03-21
;;NULL;2017-03-21
;;NULL;2017-03-21
这就是我加载文件的方式

spark.read.schema(Table.schema)
      .format("com.databricks.spark.csv")
      .option("delimiter", ";")
      .option("nullValue", "NULL")
      .load(pathTable)
      .createTempView(param.TABLE)
这是我的模式

  val fields = Seq(
    StructField("balance", StringType, nullable = true),
    StructField("status", StringType, nullable = true),
    StructField("status_date", DateType, nullable = true),
    StructField("time_key", StringType, nullable = true)
  )
  val schema = StructType(fields)
由于某些原因,
余额
状态
在应为空字符串时加载为NULL

+-------+------+-----------+----------+
|balance|status|status_date|  time_key|
+-------+------+-----------+----------+
|   null|  null|       null|2017-03-21|
|   null|  null|       null|2017-03-21|
|   null|  null|       null|2017-03-21|
+-------+------+-----------+----------+

为什么会这样?我怎么能让它显示为空字符串?

我不知道为什么会这样,但是

.na.fill("", Seq("balance", "status"))

帮助替换空值。

似乎有一个问题在2.4中解决了


SPARK-17916似乎是SPARK的正常行为。请参阅本文

要解决此问题,可以将字符串列中的空值替换为空字符串,如下所示:

df.withColumn("balance", coalesce(col("balance"), lit(""))

你使用哪种版本的spark?@astro我使用的是spark 2