【问题标题】:How to pivot a Pyspark Dataframe如何旋转 Pyspark 数据框
【发布时间】:2022-01-04 19:39:29
【问题描述】:

我面临以下挑战:我有一个名为 hashtags_users_grouped 的数据框,其结构如下:

hashtag_id  |  user_id  |  count
   123            1          1
   245            1          3
   123            2          5

在每一行中,我们找到的值告诉我某个用户何时提到某个主题标签以及他提到了多少次。在这个例子中,用户 1 提到了标签 123 1 次和 245 3 次,而用户 2 只提到了标签 123 5 次。

我想要一个具有以下输出的数据框:

user  |     123  |          245
1            1               3
2            5               0

换句话说,与第一个表相同的信息,但每个主题标签有一列,以了解用户提到每个主题标签的次数。我阅读了文档并尝试运行以下命令,但没有成功:

a = hashtags_users_joined_grouped_df.groupBy("user_id").pivot("hashtag_id")
a.show(5)

我收到以下错误消息:

AttributeError: 'GroupedData' object has no attribute 'show'

你知道有什么办法吗?

【问题讨论】:

标签: dataframe pyspark


【解决方案1】:

应用pivot 后,您需要执行聚合,在这种情况下聚合为first,因为count 指标已经计算完毕。

from pyspark.sql import functions as F

df = spark.createDataFrame([(123, 1, 1, ), 
                            (245, 1, 3), 
                            (123, 2, 5),], 
                           ("hashtag_id", "user_id", "count", ))

df.groupBy("user_id")\
  .pivot("hashtag_id")\
  .agg(F.first("count"))\
  .show()

输出

+-------+---+----+
|user_id|123| 245|
+-------+---+----+
|      1|  1|   3|
|      2|  5|null|
+-------+---+----+

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 2021-07-14
    • 2019-11-14
    相关资源
    最近更新 更多