使用MapType Schema将PySpark DataFrame编写为Parquet格式

时间:2016-05-24 07:47:41

标签: python dictionary dataframe pyspark parquet

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

首先,我使用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)

镶木地板文件已写出,但是当我使用镶木地板工具查看内容时,我看到c_id_map始终为空(即cat命令中没有打印出来),如:

c_id_map:

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

有关于此的任何想法吗?或者,镶木地板工具无法显示地图数据的问题是什么?

1 个答案:

答案 0 :(得分:0)

我很笨,不知道我是怎么错过这个的。只是忽略了这个问题,因为根本没有问题。数据存在于镶木地板文件中,使用实木拼板工具实用程序可以正确看到它。

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

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