压平 pyspark 嵌套结构 - Pyspark

问题描述

我想将嵌套列展平为单独的列,仅包含几个特定值。

首先,我从事件中心的 AVRO 捕获文件开始。一旦我将其转换为 Python 中的数据帧,我会在删除不相关的内容后收到以下列。

Converted AVRO nested structure

此列具有以下结构。

Column structure

我接下来要做的是将这一列的剩余特定值展平。

我可以为一个单元格完成此操作,但因为我正在处理嵌套结构,该列不可迭代。

有人可以帮我吗?

Result

解决方法

您的架构中有 2 个 data 字段,因此我将第一个字段称为 data_struct,第二个字段为 data_array。如果您执行 avro_df_body.select('data_struct.data_array'),您将有一个 ArrayType 列,您可以应用 explode 函数将其分解为多行。

(avro_df_body
    .withColumn('tmp',F.explode('data_struct.data_array'))
    .withColumn('speed',F.col('tmp.a'))
    .withColumn('timestamp',F.col('tmp.time'))
    .show()
)