【问题标题】:Writing PySpark DataFrame with MapType Schema to Parquet Format将带有 MapType 模式的 PySpark DataFrame 写入 Parquet 格式
【发布时间】:2016-09-21 07:13:40
【问题描述】:

我已在网上和此处搜索过,但无法找到解决我所面临问题的任何方法。

首先,我使用的是 PySpark。我有数据作为 DataFrame,我想写成镶木地板。架构由以下内容决定:

df_schema = StructType([StructField('p_id', StringType(), True),
                        StructField('c_id_map', MapType(StringType(), StringType(), True), True),
                        StructField('d_id', LongType(), True)])

我的数据确实有这些列,c_id_map 是一个 Python 字典,它的键是“e_id”或“r_id”,值是字符串(某个标识符)。

我使用以下方式编写数据:

df = sqlContext.createDataFrame(hour_filtered_rdd, df_schema)
dfwriter = df.write
dfwriter.mode('overwrite')
dfwriter.format('parquet')
dfwriter.parquet(output_path)

parquet 文件已写出,但是当我使用 parquet-tools 查看内容时,我发现 c_id_map 始终为空(即 cat 命令没有打印任何内容),例如:

c_id_map:

我认为数据在写入之前就存在于字典中。所有其他数据类型(字符串和长整型)都正确写出。作为一种解决方法,我将地图数据存储为 JSON 字符串,但我想了解发生了什么问题。

对此有什么想法吗?还是 parquet-tools 无法显示地图数据的问题?

【问题讨论】:

    标签: python dictionary dataframe pyspark parquet


    【解决方案1】:

    我很笨,不知道我是怎么错过的。忽略这个问题,因为事实证明根本没有问题。数据存在于 parquet 文件中,可以使用 parquet-tools 实用程序正确查看。

    parquet-tools cat 命令的输出如下所示:

    c_id_map:
    .key_value:
    ..key = e_id
    ..value = 6710c982
    

    【讨论】:

      猜你喜欢
      • 2022-11-06
      • 2022-01-16
      • 2016-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多