修改 PySpark DataFrame 的 Pandas 代码
Modifying Pandas code for PySpark DataFrame
我有以下用于创建图形的代码片段。我想修改它以在 PySpark 中工作,但不确定如何进行。问题是我无法遍历 PySpark 中的列并且我尝试将其变成一个函数但没有成功。
上下文:DataFrame 有一个名为 City
的列,它只是字符串形式的城市名称
cities = [i.City for i in df.select('City').distinct().collect()]
stack = []
for city in cities:
df = sqlContext.sql( 'SELECT Complaint Type, COUNT(*) as `counts` '
'FROM c311 '
'WHERE City = "{}" COLLATE NOCASE '
'GROUP BY `Complaint Type` '
'ORDER BY counts DESC'.format(city))
stack.append(Bar(x=df['Complaint Type'], y=df.counts, name=city.capitalize()))
然后我的目标是发送此 toPandas()
并在本地绘制图表。但是,自 Column is not iterable
以来我遇到了错误。我该如何为 PySpark 处理这个问题?
您可以:
from pyspark.sql.functions import upper, col
pdf = df.withColumn("city", upper(col("city"))) \
.groupBy("Complaint Type").pivot("city").count() \
.toPandas()
(或按 city
分组并按 type
旋转)并从那里使用它。
我有以下用于创建图形的代码片段。我想修改它以在 PySpark 中工作,但不确定如何进行。问题是我无法遍历 PySpark 中的列并且我尝试将其变成一个函数但没有成功。
上下文:DataFrame 有一个名为 City
的列,它只是字符串形式的城市名称
cities = [i.City for i in df.select('City').distinct().collect()]
stack = []
for city in cities:
df = sqlContext.sql( 'SELECT Complaint Type, COUNT(*) as `counts` '
'FROM c311 '
'WHERE City = "{}" COLLATE NOCASE '
'GROUP BY `Complaint Type` '
'ORDER BY counts DESC'.format(city))
stack.append(Bar(x=df['Complaint Type'], y=df.counts, name=city.capitalize()))
然后我的目标是发送此 toPandas()
并在本地绘制图表。但是,自 Column is not iterable
以来我遇到了错误。我该如何为 PySpark 处理这个问题?
您可以:
from pyspark.sql.functions import upper, col
pdf = df.withColumn("city", upper(col("city"))) \
.groupBy("Complaint Type").pivot("city").count() \
.toPandas()
(或按 city
分组并按 type
旋转)并从那里使用它。