如何在pyspark中透视或转换ArrayType格式的数据?

btxsgosb  于 2023-01-26  发布在  Apache
关注(0)|答案(1)|浏览(155)

我有以下格式的数据:

|cust_id |card_num |balance|payment |due  |card_type|
|:-------|:--------|:------|:-------|:----|:------- |
|c1      |1234     |567    |344     |33   |A        |
|c1      |2345     |57     |44      |3    |B        |
|c2      |123      |561    |34      |39   |A        |
|c3      |345      |517    |914     |23   |C        |
|c3      |127      |56     |34      |32   |B        |
|c3      |347      |67     |344     |332  |B        |

我想把它转换成下面的ArrayType。

|cust_id|card_num     |balance    |payment    |due        | card_type|
|:------|:--------    |:------    |:-------   |:----      |:----     |
|c1     |[1234,2345]  |[567,57]   |[344,44]   |[33,3]     |[A,B]     |
|c2     |[123]        |[561]      |[34]       |[39]       |[A]       |
|c3     |[345,127,347]|[517,56,67]|914,34,344]|[23,32,332]|[C,B,B]   |

如何在pyspark中编写一个通用代码来做这个转换并保存为csv格式?

wmomyfyw

wmomyfyw1#

您只需要按cust_id列分组,并使用collect_list函数获取数组类型的聚合列。

df = # input
df.groupBy("cust_id").agg(
        collect_list("card_num").alias("card_num"),
        collect_list("balance").alias("balance"),
        collect_list("payment").alias("payment"),
        collect_list("due").alias("due"),
        collect_list("card_type").alias("card_type"))

相关问题