我想透视一个火花数据帧,我参考了 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
类中定义的方法。