【问题标题】:How to handle NullType in Spark Dataframe using Python?如何使用 Python 处理 Spark Dataframe 中的 NullType?
【发布时间】:2019-07-24 14:12:06
【问题描述】:

我正在尝试将 MapR DB 中的数据加载到 Spark DF 中。 然后我只是想将 DF 导出为 CSV 文件。 但是,我得到的错误是:

“com.mapr.db.spark.exceptions.SchemaMappingException:无法解析数据类型 NullType 的值(当前标记:STRING)”

我尝试了几种方法,将列转换为 StringType。 这是其中之一:

df = spark.loadFromMapRDB(db_table).select(
F.col('c_002.v_22').cast(T.StringType()).alias('aaa'),
F.col('c_002.v_23').cast(T.StringType()).alias('bbb')
)

print(df.printSchema())

PrintSchema 的输出:

root
 |-- aaa: string (nullable = true)
 |-- bbb: string (nullable = true)

“aaa”和“bbb”列中的值可以为空。 然后我尝试将 df 导出为 CSV 文件:

df = df.repartition(10)
df.write.csv(csvFile, compression='gzip', mode='overwrite', sep=',', header='true', quoteAll='true')

【问题讨论】:

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


    【解决方案1】:

    我遇到了一个与 MapR-DB JSON 表类似的问题,我能够通过在加载到 DataFrame 时定义表架构来解决:

    tableSchema = StructType([
        StructField("c_002.v_22", StringType(), True), # True here signifies nullable: https://spark.apache.org/docs/2.3.1/api/python/pyspark.sql.html?highlight=structfield#pyspark.sql.types.StructField
        StructField("c_002.v_23", StringType(), True),
    ])
    
    df = spark.loadFromMapRDB(db_table, tableSchema ).select(
    F.col('c_002.v_22').alias('aaa'),
    F.col('c_002.v_23').alias('bbb')
    )
    
    

    您可以尝试的另一件事是简单地用一些东西填充空值: https://spark.apache.org/docs/2.3.1/api/python/pyspark.sql.html#pyspark.sql.DataFrame.fillna

    df = df.na.fill('null')
    

    【讨论】:

      猜你喜欢
      • 2016-01-29
      • 2021-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-15
      • 2020-07-30
      相关资源
      最近更新 更多