我正在 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)
出于某种原因balance
,status
当它们应该是空字符串时被加载为 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|
+-------+------+-----------+----------+
为什么会这样,我怎样才能让它显示为空字符串?
这似乎是 Spark 中的正常行为。请参阅本文Spark 对 CSV 文件中的空字符串和空白值的处理。
要修复它,您可以用空字符串替换字符串列中的空值,如下所示:
df.withColumn("balance", coalesce(col("balance"), lit(""))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句