python - 使用 PySpark 删除 spark 数据框中嵌套结构中的列(文本中的详细信息)
问题描述
我知道我在这里问了一个类似的问题,但那是针对行过滤的。这次我试图删除列。我尝试实现高阶函数等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)
我只想在“测量”中保留“观察 ID”或“观察结果”列。所以目前当我跑步时,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 中做到这一点?感谢您期待您的帮助!
解决方案
您可以使用所需的字段并将它们放在. higher order function
transform
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)
推荐阅读
- jenkins - 如何在不消耗 jenkins 执行器的情况下使 jenkins 声明性管道 waitForWebhook?
- android - Push API 如何在内部工作?
- php - Laravel 6+ Uniq id generation Only in number with Additional Logic
- ruby-on-rails - 后控制器需要后
- python - 使用 pynput 在随机位置自动单击鼠标(用于网络浏览器游戏)
- python - 在 powershell 中运行 python 文件
- java - 在 JSR 303 bean 验证单元测试中,如何检查违反了哪些约束
- clojure - Clojure 调用一系列函数并存储它们的返回值
- django - 如何通过 id 在 Django 中加入两个模型?
- vue.js - 更改网址后立即停止观看