【发布时间】:2023-04-01 10:32:01
【问题描述】:
我正在尝试从嵌套的 JSON (具有动态架构) 中提取某些参数并使用 pyspark 生成 spark 数据框。
我的代码在级别 1 (key:value) 上完美运行,但无法为作为嵌套 JSON 一部分的每个 (key:value) 对获取独立列。
JSON 架构示例
注意 - 这不是确切的架构。它只是为了给出模式嵌套性质的想法
{
"tweet": {
"text": "RT @author original message"
"user": {
"screen_name": "Retweeter"
},
"retweeted_status": {
"text": "original message".
"user": {
"screen_name": "OriginalTweeter"
},
"place": {
},
"entities": {
},
"extended_entities": {
}
},
},
"entities": {
},
"extended_entities": {
}
}
}
PySpark 代码
from pyspark.sql.types import StructType, StructField, StringType
schema = StructType([
StructField("text", StringType(), True),
StructField("created_at", StringType(), True),
StructField("retweeted_status", StructType([
StructField("text", StringType(), True),
StructField("created_at", StringType(), True)]))
])
df = spark.read.schema(schema).json("/user/sagarp/NaMo/data/NaMo2019-02-12_00H.json")
df.show()
当前输出 - (带有真实的 JSON 数据)
嵌套 retweet_status JSON 下的所有(键:值)都被压缩为 1 个单个列表。例如[文本,created_at,实体]
+--------------------+--------------------+--------------------+
| text| created_at| retweeted_status|
+--------------------+--------------------+--------------------+
|RT @Hoosier602: @...|Mon Feb 11 19:04:...|[@CLeroyjnr @Gabr...|
|RT @EgSophie: Oh ...|Mon Feb 11 19:04:...|[Oh cool so do yo...|
|RT @JacobAWohl: @...|Mon Feb 11 19:04:...|[@realDonaldTrump...|
预期输出
我希望每个键都有独立的列。另外,请注意您已经有一个同名的父级密钥 text。您将如何处理此类情况?
理想情况下,我想要“text”、“entities”、“retweet_status_text”、“retweet_status_entities”等列
【问题讨论】:
标签: json pyspark apache-spark-sql