通过将键作为列将 json 字典转换为 spark 数据帧

Posted

技术标签:

【中文标题】通过将键作为列将 json 字典转换为 spark 数据帧【英文标题】:Converting json dictionary to spark dataframe by having keys as columns 【发布时间】:2020-11-18 17:51:54 【问题描述】:

是否可以通过将键作为列和下面的值来将字典转换为数据框?

我有这个来自 api 的结果集作为字典:


'information': [
    'created': '2020-10-26T00:00:00+00:00',
    'title': 'Random1',
    'published': 'YES',
, 
    'created': '2020-11-06T00:00:00+00:00',
    'title': 'Random2',
    'published': 'YES',
, 
    'created': '2020-10-27T00:00:00+00:00',
    'title': 'Random3',
    'published': 'YES',
, 
    'created': '2020-10-29T00:00:00+00:00',
    'title': 'Random4',
    'published': 'YES',
]

如果我将其转换为这样的数据框:

json_rdd=sc.parallelize([data_dict['information']])
spark_df = spark.createDataFrame(json_rdd)
spark_df.createOrReplaceTempView("data_df");

这给了我列为 _1、_2、_3、_4 的列,其中的数据仍显示为对象。

是否可以让 data_df(转换后的数据框)将列显示为已创建、标题、已发布,并将相应列中的值显示为平面?

【问题讨论】:

【参考方案1】:

您可以直接使用字典创建数据框,无需将其转换为rdd。

arr = your_dict_here
spark.createDataFrame(arr['information']).show()

输出:

+--------------------+---------+-------+
|             created|published|  title|
+--------------------+---------+-------+
|2020-10-26T00:00:...|      YES|Random1|
|2020-11-06T00:00:...|      YES|Random2|
|2020-10-27T00:00:...|      YES|Random3|
|2020-10-29T00:00:...|      YES|Random4|
+--------------------+---------+-------+

【讨论】:

以上是关于通过将键作为列将 json 字典转换为 spark 数据帧的主要内容,如果未能解决你的问题,请参考以下文章

在python中的字典上使用join()将键值对作为一个长字符串返回

通过保留顺序,根据 id 列将 Spark DataFrame 拆分为两个 DataFrame(70% 和 30%)

Postgresql:如何在不使用中间 hstore 的情况下将键值表转换为 json

转换具有 numpy 数组的列将其转换为 dtype 作为对象的 numpy 数组

如何在 PySpark 中将字符串转换为字典 (JSON) 的 ArrayType

如何在 presto 中将 varchar 转换为 MAP(VARCHAR,VARCHAR)