使用 PySpark 在 ArrayType 列中按项目分组
Group row by item in ArrayType column using PySpark
我有 Pyspark DataFrame 和这样的架构
root
|-- id: string (nullable = true)
|-- address: string (nullable = true)
|-- phone_list: array (nullable = true)
| |-- element: string (containsNull = true)
示例:
id address phone_list
1 HaNoi [ 012346789, 032145698, 0565622253 ]
2 Singapore [ 012346789, 069855633 ]
3 Moscow [ 023466466, 069855633 ]
4 Tokyo [ 044656611, 061316561 ]
可以看到id 1和id 2共有1个phone号(012346789),id 2和id 3有1个phone号(069855633),所以我想要创建新的数据框来将这些 ID 组合在一起。
看起来像:
id address phone_list
1 [ HaNoi , Singapore, Moscow ] [ 012346789, 032145698, 0565622253, 069855633, 023466466 ]
2 [ Tokyo ] [ 044656611, 061316561 ]
有人有提示或解决方案吗?
对于你的情况,我会做的是
df= pyspark.sql('''select id, address, phone_number
from table_name as tb LATERAL VIEW EXPLODE(tb.phone_list)as phone_number ''')
展开列表,然后我将按 phone_number!
分组
您需要先分解 phone 个号码,然后对 phone 个号码进行分组并收集地址列表。此外,您需要 collect_set phone 个数字(collect_set() 包含不同的元素,collect_list() 包含所有元素)以获得不同的 phone 集数字。如果你想要完整的代码,请告诉我。
我有 Pyspark DataFrame 和这样的架构
root
|-- id: string (nullable = true)
|-- address: string (nullable = true)
|-- phone_list: array (nullable = true)
| |-- element: string (containsNull = true)
示例:
id address phone_list
1 HaNoi [ 012346789, 032145698, 0565622253 ]
2 Singapore [ 012346789, 069855633 ]
3 Moscow [ 023466466, 069855633 ]
4 Tokyo [ 044656611, 061316561 ]
可以看到id 1和id 2共有1个phone号(012346789),id 2和id 3有1个phone号(069855633),所以我想要创建新的数据框来将这些 ID 组合在一起。 看起来像:
id address phone_list
1 [ HaNoi , Singapore, Moscow ] [ 012346789, 032145698, 0565622253, 069855633, 023466466 ]
2 [ Tokyo ] [ 044656611, 061316561 ]
有人有提示或解决方案吗?
对于你的情况,我会做的是
df= pyspark.sql('''select id, address, phone_number
from table_name as tb LATERAL VIEW EXPLODE(tb.phone_list)as phone_number ''')
展开列表,然后我将按 phone_number!
分组您需要先分解 phone 个号码,然后对 phone 个号码进行分组并收集地址列表。此外,您需要 collect_set phone 个数字(collect_set() 包含不同的元素,collect_list() 包含所有元素)以获得不同的 phone 集数字。如果你想要完整的代码,请告诉我。