使用 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 集数字。如果你想要完整的代码,请告诉我。