我知道我问过一个类似的问题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)
字符串
我想在“measurements”中只保留“Observation_ID”或“Observation_Result”列。
[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中有办法做到这一点吗?
2条答案
按热度按时间pkmbmrz71#
您可以使用**
higher order function
*transform
到select
您想要的字段,并将它们放在struct
**中。字符串
hfwmuf9z2#
对于任何想寻找一个能与旧版pyspark兼容的答案的人来说,这里有一个使用udfs的答案:
字符串
指纹
型