Spark DataFrameWriter имеет два параметра для опции формата .csv
, которые вы можете установить: nullValue
и emptyValue
, которые вы можете установить как null
вместо пустых строк. См. Документацию DataFrameWriter здесь .
В вашем конкретном примере c вы можете просто добавить параметры в свой write
оператор:
myDataset
.withColumn("map_str", mapToStringUDF(col("map")))
.drop("map")
.write
.option("emptyValue", null)
.option("nullValue", null)
.option("header", "false")
.option("delimiter", "\t")
.csv("output.csv")
Или вот полный пример, включая тестовые данные:
import org.apache.spark.sql.Row
import org.apache.spark.sql.types._
val data = Seq(
Row(null, "20200506", "Hello"),
Row(2, "20200607", null),
Row(3, null, "World")
)
val schema = List(
StructField("Item", IntegerType, true),
StructField("Date", StringType, true),
StructField("Message", StringType, true)
)
val testDF = spark.createDataFrame(
spark.sparkContext.parallelize(data),
StructType(schema)
)
testDF.write
.option("emptyValue", null)
.option("nullValue", null)
.option("header", "true")
.csv(PATH)
Результат необработанного .csv
должен выглядеть следующим образом:
Item,Date,Message
,20151231,Hello
2,20160101,
3,,World