pyspark 无法停止将空字符串读取为 null (spark 3.0)
Posted
技术标签:
【中文标题】pyspark 无法停止将空字符串读取为 null (spark 3.0)【英文标题】:pyspark can't stop reading empty string as null (spark 3.0) 【发布时间】:2021-05-24 14:05:37 【问题描述】:我有一个这样的 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 列默认为空
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 仍然将数据读取为 null.. 有没有办法让 pyspark 按原样读取空字符串?
谢谢
【问题讨论】:
【参考方案1】:看起来自Spark Version 2.0.1
以来的空值被视为空值。实现结果的一种方法是使用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 |
+---+----+---+
【讨论】:
以上是关于pyspark 无法停止将空字符串读取为 null (spark 3.0)的主要内容,如果未能解决你的问题,请参考以下文章