【问题标题】:pyspark can't stop reading empty string as null (spark 3.0)pyspark 无法停止将空字符串读取为 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 按原样读取空字符串?

谢谢

【问题讨论】:

    标签: apache-spark pyspark apache-spark-sql null


    【解决方案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 |
    +---+----+---+
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-06
      • 2019-08-19
      • 2020-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多