pyspark 无法停止将空字符串读取为 null (spark 3.0)

pyspark can't stop reading empty string as null (spark 3.0)

我有一些这样的 csv 数据文件(^ 作为分隔符):

ID name age
0
1 Mike 20

当我做的时候

df = spark.read.option("delimiter", "^").option("quote","").option("header", "true").option(
        "inferSchema", "true").csv(xxxxxxx)

spark 会将第 0 行之后的第 2 列默认为 null

df.show():
ID name age
0 null null
1 Mike 20

如何阻止 pyspark 将数据读取为 null 而只是空字符串?

我试过在最后添加一些选项

1,option("nullValue", "xxxx").option("treatEmptyValuesAsNulls", False)
2,option("nullValue", None).option("treatEmptyValuesAsNulls", False)
3,option("nullValue", None).option("emptyValue", None)
4,option("nullValue", "xxx").option("emptyValue", "xxx")

但无论我做什么,pyspark 仍然将数据读取为空。有没有办法让 pyspark 按原样读取空字符串?

谢谢

看起来自 Spark Version 2.0.1 以来的空值被视为 null。实现结果的一种方式是使用 df.na.fill(...):

df = spark.read.csv('your_data_path', sep='^', header=True)
# root
#  |-- ID: string (nullable = true)
#  |-- name: string (nullable = true)
#  |-- age: string (nullable = true)

# Fill all columns
# df = df.na.fill('')

# Fill specific columns
df = df.na.fill('', subset=['name', 'age'])

df.show(truncate=False)

输出

+---+----+---+
|ID |name|age|
+---+----+---+
|0  |    |   |
|1  |Mike|20 |
+---+----+---+