json - 从 PySpark 数据框创建嵌套 JSON
问题描述
这个平面 json 到 pyspark 中的嵌套 json。
{
'event_type': 'click',
'id': '223',
'person_id': 201031940,
'category': 'Chronicles',
'approved_content': 1
}
至
{
'event_type': 'click',
user: {
'id': '223',
'person_id': 201031940
},
event: {
'category': 'Chronicles',
'approved_content': 1
}
}
解决方案
您也可以不使用更有效的 udfs 来执行此操作,并且如果您处理大量记录,则会产生重大影响:
import pyspark.sql.fuctions as f
events_schema = StructType([
StructField('event_type', StringType(), True),
StructField('id', StringType(), True),
StructField('person_id', StringType(), True),
StructField('category', StringType(), True),
StructField('approved_content', StringType(), True),
])
events = [{
'event_type': 'click',
'id': '223',
'person_id': 201031940,
'category': 'Chronicles',
'approved_content': 1
}]
df = spark.createDataFrame(events, schema=events_schema)
newDf = (df
.withColumn('user', f.struct(df.id, df.person_id))
.withColumn('event', f.struct(df.category, df.approved_content))
.withColumn('nestedEvent', f.struct(f.col('user'), f.col('event')))
.select('nestedEvent'))
推荐阅读
- ios - SwiftUI 中的惰性属性
- ruby-on-rails - 启用 ufw 时,RoR 上的 Recaptcha 不起作用
- java-8 - 如何在 Optional 中转换 lambda 参数
- java - 运行 REST Assured 自定义 Hamcrest 匹配器时获取“JSON 路径 ... 不匹配”
- replace - 使用 Gulp 替换块/占位符
- python - 如何使用 eel(python 库)打开一个新的 HTML 页面?
- comm - 通讯指令问题
- webpack - 如何在 webpacker rails 6 中编译 application.js 文件
- java - 在注入点使用限定符 @default 的类型的依赖关系不满足
- python - Numpy:如何在盒子内创建网格?