修改 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 旋转)并从那里使用它。