Nab*_*zir 7 python dataframe pandas apache-spark pyspark
我想旋转一个 spark 数据框,我参考 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
Run Code Online (Sandbox Code Playgroud)
然后我尝试旋转表名
In [96]:
spDF.groupBy('name').pivot('name', values=None)
Out[96]:
<pyspark.sql.group.GroupedData at 0x7f0ad03750f0>
Run Code Online (Sandbox Code Playgroud)
当我试图向他们展示
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'
Run Code Online (Sandbox Code Playgroud)
我不知道为什么'GroupedData'不能显示,我该怎么做才能解决这个问题?
ech*_*ch0 16
该pivot()方法返回一个GroupedData对象,就像groupBy(). 如果之前没有show()在GroupedData对象上使用聚合函数(例如sum()或 even count()),则不能在该对象上使用。
查看这篇文章了解更多信息
让我们创建一些类似于您的数据集的测试数据:
data = [
("123", "McDonalds"),
("123", "Starbucks"),
("123", "McDonalds"),
("777", "McDonalds"),
("777", "McDonalds"),
("777", "Dunkin")
]
df = spark.createDataFrame(data, ["customer_id", "name"])
df.show()
Run Code Online (Sandbox Code Playgroud)
+-----------+---------+
|customer_id| name|
+-----------+---------+
| 123|McDonalds|
| 123|Starbucks|
| 123|McDonalds|
| 777|McDonalds|
| 777|McDonalds|
| 777| Dunkin|
+-----------+---------+
Run Code Online (Sandbox Code Playgroud)
让我们对数据集进行透视,使 customer_ids 成为列:
df.groupBy("name").pivot("customer_id").count().show()
+---------+----+----+
| name| 123| 777|
+---------+----+----+
|McDonalds| 2| 2|
|Starbucks| 1|null|
| Dunkin|null| 1|
+---------+----+----+
Run Code Online (Sandbox Code Playgroud)
现在让我们旋转 DataFrame,使餐厅名称成为列:
df.groupBy("customer_id").pivot("name").count().show()
+-----------+------+---------+---------+
|customer_id|Dunkin|McDonalds|Starbucks|
+-----------+------+---------+---------+
| 777| 1| 2| null|
| 123| null| 2| 1|
+-----------+------+---------+---------+
Run Code Online (Sandbox Code Playgroud)
类似错误的代码df.groupBy("name").show()随消息一起输出AttributeError: 'GroupedData' object has no attribute 'show'。您只能在类pyspark.sql.GroupedData的实例上调用类中定义的方法GroupedData。
| 归档时间: |
|
| 查看次数: |
27862 次 |
| 最近记录: |