gpt4 book ai didi

python - PySpark:如何从嵌套在数组内的结构中的结构中提取变量?

转载 作者:行者123 更新时间:2023-12-05 01:13:45 24 4
gpt4 key购买 nike

以下是一个玩具示例,它是我的实际数据架构的一个子集。为了简洁起见,我将其缩写。

我希望构建一个包含 3 个字段的 PySpark 数据框:IDTypeTIMESTAMP,然后将其保存为 Hive table 。我正在努力使用 PySpark 代码来提取相关列。

 |-- Records: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- FileID: long (nullable = true)
| | |-- SrcFields: struct (nullable = true)
| | | |-- ID: string (nullable = true)
| | | |-- Type: string (nullable = true)
| | | |-- TIMESTAMP: string (nullable = true)

到目前为止,我想我的解决方案应该是这样的:

from pyspark.sql.functions import col, explode

df.withColumn("values", explode("values")).select(
"*", col("values")["name"].alias("name"), col("values")["id"].alias("id")
)

但是,上面的解决方案没有考虑到我的用例的额外嵌套,我无法弄清楚所需的额外语法。

最佳答案

在 PySpark 中,您可以使用点符号访问结构的子字段。所以这样的事情应该可以工作:

  1. 分解数组
  2. 使用点表示法获取结构的子字段
(
df.withColumn("values", explode("Records"))
.select(
col("values.SrcFields.ID").alias("id"),
col("values.SrcFields.Type").alias("type"),
col("values.SrcFields.TIMESTAMP").alias("timestamp")
)
)

关于python - PySpark:如何从嵌套在数组内的结构中的结构中提取变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59847723/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com