pyspark pivot无聚合

eagi6jfj  于 2021-05-16  发布在  Spark
关注(0)|答案(1)|浏览(519)

我希望基本上是pivot,而不需要在最后进行聚合,以保持Dataframe的完整性,而不是创建分组对象
例如:

+---------++---------++---------++---------+
|  country|   code    |Value    | ids
+---------++---------++---------++---------+
| Mexico  |food_1_3   |apple    | 1
| Mexico  |food_1_3   |banana   | 2
| Canada  |beverage_2 |milk     | 1
| Mexico  |beverage_2 |water    | 2
+---------++---------++---------++---------+

需要这个:

+---------++---------++---------++----------+
|  country|    id     |food_1_3 | beverage_2|
+---------++---------++---------++----------+
| Mexico  |    1      |apple      |         |
| Mexico  |    2      |banana     |water    |
| Canada  |    1      |           |milk     |
|+---------++---------++---------++---------+

我试过了

(df.groupby(df.country, df.id).pivot("code").agg(first('Value').alias('Value')))

但基本上是一个前1名。在我的实际例子中,我有20列,有些只包含整数,有些包含字符串。。。所以,总数,计数,收集,列表,这些AGG都没有解决。。。

cgyqldqp

cgyqldqp1#

那是因为你的“id”不是唯一的。添加一个唯一的索引列,这样应该可以:

import pyspark.sql.functions as F

pivoted = df.groupby(df.country, df.id, F.monotonically_increasing_id().alias('index')).pivot("code").agg(F.first('Value').alias('Value')).drop('index')
pivoted.show()

+-------+---+----------+--------+
|country|ids|beverage_2|food_1_3|
+-------+---+----------+--------+
| Mexico|  1|      null|   apple|
| Mexico|  2|     water|    null|
| Canada|  1|      milk|    null|
| Mexico|  2|      null|  banana|
+-------+---+----------+--------+

相关问题