我有带有这样的架构的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个电话号码(012346789),而id 2与id 3共有1个电话号码(069855633),所以我想创建新的数据框将这些id分组在一起。 看起来像:
id address phone_list
1 [ HaNoi , Singapore, Moscow ] [ 012346789, 032145698, 0565622253, 069855633, 023466466 ]
2 [ Tokyo ] [ 044656611, 061316561 ]
有人知道提示或解决方案吗?
答案 0 :(得分:0)
在您的情况下,我会做的是
df= pyspark.sql('''select id, address, phone_number
from table_name as tb LATERAL VIEW EXPLODE(tb.phone_list)as phone_number ''')
爆炸列表,然后按电话号码分组!
答案 1 :(得分:0)
您将需要首先爆炸电话号码,然后对电话号码进行分组并收集地址列表。同样,您需要对电话号码进行collect_set(collect_set()包含不同的元素,collect_list()包含所有元素)以获取不同的电话号码集。让我知道您是否需要完整的代码。