首页 > 解决方案 > 从 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
    }
}

标签: jsondataframeapache-sparkpysparknested

解决方案


您也可以不使用更有效的 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'))

推荐阅读