在 Spark 数据帧中执行透视时'GroupedData'对象没有属性'show'



我想透视一个火花数据帧,我参考了 pyspark 文档,基于pivot函数,线索.groupBy('name').pivot('name', values=None)。这是我的数据集,

In[75]:  spDF.show()
Out[75]:
+-----------+-----------+
|customer_id|       name|
+-----------+-----------+
|      25620| MCDonnalds|
|      25620|  STARBUCKS|
|      25620|        nan|
|      25620|        nan|
|      25620| MCDonnalds|
|      25620|        nan|
|      25620| MCDonnalds|
|      25620|DUNKINDONUT|
|      25620|   LOTTERIA|
|      25620|        nan|
|      25620| MCDonnalds|
|      25620|DUNKINDONUT|
|      25620|DUNKINDONUT|
|      25620|        nan|
|      25620|        nan|
|      25620|        nan|
|      25620|        nan|
|      25620|   LOTTERIA|
|      25620|   LOTTERIA|
|      25620|  STARBUCKS|
+-----------+-----------+
only showing top 20 rows

然后我尝试对表名称进行透视

In [96]:
spDF.groupBy('name').pivot('name', values=None)
Out[96]:
<pyspark.sql.group.GroupedData at 0x7f0ad03750f0>

当我试图向他们展示时

In [98]:
spDF.groupBy('name').pivot('name', values=None).show()
Out [98]:
---------------------------------------------------------------------------
AttributeError                       Traceback (most recent call last)
<ipython-input-98-94354082e956> in <module>()
----> 1 spDF.groupBy('name').pivot('name', values=None).show()
AttributeError: 'GroupedData' object has no attribute 'show'

我不知道为什么'GroupedData'不能显示,我该怎么办才能解决问题?

pivot()方法返回一个GroupedData对象,就像groupBy()一样。如果不在GroupedData对象上使用聚合函数(例如sum()甚至count()(,则无法对show()对象使用

。有关详细信息,请参阅此文章

让我们创建一些类似于数据集的测试数据:

data = [
("123", "McDonalds"),
("123", "Starbucks"),
("123", "McDonalds"),
("777", "McDonalds"),
("777", "McDonalds"),
("777", "Dunkin")
]
df = spark.createDataFrame(data, ["customer_id", "name"])
df.show()
+-----------+---------+
|customer_id|     name|
+-----------+---------+
|        123|McDonalds|
|        123|Starbucks|
|        123|McDonalds|
|        777|McDonalds|
|        777|McDonalds|
|        777|   Dunkin|
+-----------+---------+

让我们透视数据集,使customer_ids是列:

df.groupBy("name").pivot("customer_id").count().show()
+---------+----+----+
|     name| 123| 777|
+---------+----+----+
|McDonalds|   2|   2|
|Starbucks|   1|null|
|   Dunkin|null|   1|
+---------+----+----+

现在,让我们透视数据帧,使餐厅名称为列:

df.groupBy("customer_id").pivot("name").count().show()
+-----------+------+---------+---------+
|customer_id|Dunkin|McDonalds|Starbucks|
+-----------+------+---------+---------+
|        777|     1|        2|     null|
|        123|  null|        2|        1|
+-----------+------+---------+---------+

df.groupBy("name").show()这样的代码会随着AttributeError: 'GroupedData' object has no attribute 'show'消息而出错。 只能在GroupedData类的实例上调用pyspark.sql.GroupedData类中定义的方法。

最新更新