使用MapType Schema将PySpark DataFrame写入Parquet格式



我在网上和这里搜索过,但找不到任何解决我面临的问题的方法。

首先,我使用PySpark。我有一个数据框架,我想写出来作为镶木地板。该模式由以下内容决定:

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字符串,但我想了解出了什么问题。

对此有什么想法吗?或者,是拼花地板工具无法显示地图数据的问题吗?

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

拼花地板工具cat命令的输出如下:

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

最新更新