pyspark“DataFrame”对象没有属性“pivot”

new*_*eaf 3 pivot pyspark

我正在使用 pyspark 2.0 我有一个像这样的 df:

    +----------+----------+--------
    |pid       |      date| p_category
    +----------+----------+--------
    |    1ba   |2016-09-30|flat
    |    3ed   |2016-09-30|ultra_thin
    +----------+----------+----------
Run Code Online (Sandbox Code Playgroud)

我做了一个

    df.groupBy("p_category","date") \                        
    .agg(countDistinct("pid").alias('cnt'))
Run Code Online (Sandbox Code Playgroud)

我得到了这个:

    +-------------+----------+------+
    |p_category   |      date|   cnt|
    +-------------+----------+------+
    |    flat     |2016-09-30|116251|
    |ultra_thin   |2016-09-30|113017|
    +-------------+----------+------+
Run Code Online (Sandbox Code Playgroud)

但我想要这样的数据透视表:

    +----------+----------+------+
    |date      |      flat|  ultra-thin
    +----------+----------+------+
   2016-09-30  |    116251|113017
    ------------------------------
   df.groupBy("p_category","date") \                        
    .agg(countDistinct("pid").alias('cnt')).pivot("p_category")
Run Code Online (Sandbox Code Playgroud)

我收到这个错误:

“DataFrame”对象没有属性“pivot”

在这种情况下我该如何进行枢轴或者有其他解决方案?谢谢

Mar*_*usz 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|
+----------+----+----------+
Run Code Online (Sandbox Code Playgroud)