gpt4 book ai didi

python - 使用 PySpark 删除 spark 数据框中嵌套结构中的列(文本中的详细信息)

转载 作者:行者123 更新时间:2023-12-04 10:07:24 25 4
gpt4 key购买 nike

我知道我问过类似的问题 here但那是为了行过滤。这次我试图删除列。我曾尝试实现高阶函数,例如 FILTER 和其他函数,但无法正常工作。我认为我需要的是一个 SELECT 高阶函数,但它似乎不存在。感谢您的帮助!

我正在使用 pyspark 并且我有一个数据框对象 df 这就是 df.printSchema() 的输出结果

root
|-- M_MRN: string (nullable = true)
|-- measurements: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- Observation_ID: string (nullable = true)
| | |-- Observation_Name: string (nullable = true)
| | |-- Observation_Result: string (nullable = true)

我只想在“测量”中保留“Observation_ID”或“Observation_Result”列。所以目前当我运行 df.select('measurements').take(2) 我得到

[Row(measurements=[Row(Observation_ID='5', Observation_Name='ABC', Observation_Result='108/72'),
Row(Observation_ID='11', Observation_Name='ABC', Observation_Result='70'),
Row(Observation_ID='10', Observation_Name='ABC', Observation_Result='73.029'),
Row(Observation_ID='14', Observation_Name='XYZ', Observation_Result='23.1')]),
Row(measurements=[Row(Observation_ID='2', Observation_Name='ZZZ', Observation_Result='3/4'),
Row(Observation_ID='5', Observation_Name='ABC', Observation_Result='7')])]

我希望在执行上述过滤并运行 df.select('measurements').take(2) 之后得到

[Row(measurements=[Row(Observation_ID='5', Observation_Result='108/72'),
Row(Observation_ID='11', Observation_Result='70'),
Row(Observation_ID='10', Observation_Result='73.029'),
Row(Observation_ID='14', Observation_Result='23.1')]),
Row(measurements=[Row(Observation_ID='2', Observation_Result='3/4'),
Row(Observation_ID='5', Observation_Result='7')])]

有没有办法在 pyspark 中执行此操作?感谢您期待您的帮助!

最佳答案

您可以使用高阶函数 transform to select 您想要的字段并将它们放入 struct 中。

from pyspark.sql import functions as F
df.withColumn("measurements",F.expr("""transform(measurements\
,x-> struct(x.Observation_ID as Observation_ID,\
x.Observation_Result as Observation_Result))""")).printSchema()

#root
#|-- measurements: array (nullable = true)
#| |-- element: struct (containsNull = false)
#| | |-- Observation_ID: string (nullable = true)
#| | |-- Observation_Result: string (nullable = true)

关于python - 使用 PySpark 删除 spark 数据框中嵌套结构中的列(文本中的详细信息),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61512873/

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