以下是一个玩具示例,它是我的实际数据架构的子集。为了简洁起见,我将其缩写。
我希望建立一个包含3个字段PySpark数据框中:ID
,Type
而且TIMESTAMP
我会再保存为配置单元表。我正在努力与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中,您可以使用点表示法访问结构的子字段。所以这样的事情应该工作:
(
df.withColumn("values", explode("Records"))
.select(
col("values.SrcFields.ID").alias("id"),
col("values.SrcFields.Type").alias("type"),
col("values.SrcFields.TIMESTAMP").alias("timestamp")
)
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句