pyspark中的'DataFrame'对象没有'pivot'属性。

3

我是使用pyspark 2.0的。 我有一个类似这样的df:

    +----------+----------+--------
    |pid       |      date| p_category
    +----------+----------+--------
    |    1ba   |2016-09-30|flat
    |    3ed   |2016-09-30|ultra_thin
    +----------+----------+----------

我做了一个

    df.groupBy("p_category","date") \                        
    .agg(countDistinct("pid").alias('cnt'))

我得到了这个:

    +-------------+----------+------+
    |p_category   |      date|   cnt|
    +-------------+----------+------+
    |    flat     |2016-09-30|116251|
    |ultra_thin   |2016-09-30|113017|
    +-------------+----------+------+

但我想要像这样的数据透视表:
    +----------+----------+------+
    |date      |      flat|  ultra-thin
    +----------+----------+------+
   2016-09-30  |    116251|113017
    ------------------------------
   df.groupBy("p_category","date") \                        
    .agg(countDistinct("pid").alias('cnt')).pivot("p_category")

我遇到了这个错误:
“DataFrame”对象没有属性“pivot”
在这种情况下,我该如何进行数据透视表操作?或者有其他解决方案吗?
谢谢。
1个回答

5

您应该在分组数据上调用pivot,因此首先需要按date进行分组,然后再根据p_category进行旋转:

>>> df.groupBy('date').pivot('p_category').agg(countDistinct('pid').alias('cnt')).show()
+----------+----+----------+                                                    
|      date|flat|ultra_thin|
+----------+----+----------+
|2016-09-30|   1|         1|
+----------+----+----------+

1
似乎链接已过期,但仍可在https://spark.apache.org/docs/上找到。 - hipokito

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接