将 pyspark groupedData 对象转换为 spark Dataframe

convert pyspark groupedData object to spark Dataframe

我必须在 pyspark 数据帧上进行 2 级分组。 我的暂定:

grouped_df=df.groupby(["A","B","C"])
grouped_df.groupby(["C"]).count()

但是我得到以下错误:

'GroupedData' object has no attribute 'groupby'

我想我应该先将分组对象转换为 pySpark DF。但是我做不到。

有什么建议吗?

我遇到了同样的问题。我解决这个问题的方法是在第一个 groupby 之后首先执行 "count()",因为 returns 是一个 Spark DataFrame,而不是 GroupedData 对象。然后你可以在返回的 DataFrame 上做另一个 groupby。

所以尝试:

grouped_df=df.groupby(["A","B","C"]).count()
grouped_df.groupby(["C"]).count()

https://spark.apache.org/docs/2.1.0/api/python/pyspark.sql.html#pyspark.sql.GroupedData

pyspark.sql.GroupedData Aggregation methods, returned by DataFrame.groupBy().

A set of methods for aggregations on a DataFrame, created by DataFrame.groupBy().

您可以使用聚合函数作为 agg、avg、count、max、mean、min、pivot、sum、collect_list、collect_set、count、first、分组等

首先注意:这个函数是一个动作,如果你误用它,它可能会让你的脚本变慢。

如果您有一个数字列,您可以使用聚合函数,例如最小值、最大值、平均值等,但如果您有一个字符串列,您可能想要使用:

df.groupBy("ID").pivot("VAR").agg(concat_ws('', collect_list(col("VAL"))))

df.groupBy("ID").pivot("VAR").agg(collect_list(collect_list("VAL")[0]))

df.groupBy("ID").pivot("VAR").agg(first("VAL"))

函数 DataFrame.groupBy(cols) returns 一个 GroupedData 对象。为了将 GroupedData 对象转换回 DataFrame,您需要使用 GroupedData 函数之一,例如 mean(cols) avg(cols) count()。使用您的示例的示例是:

df = sqlContext.createDataFrame([['a', 'b', 'c'], ['a', 'b', 'c'], ['a', 'b', 'c']], schema=['A', 'B', 'C'])
df.show()

+---+---+---+
|  A|  B|  C|
+---+---+---+
|  a|  b|  c|
|  a|  b|  c|
|  a|  b|  c|
+---+---+---+

gdf = df.groupBy('C').count()
gdf.show()

+---+-----+
|  C|count|
+---+-----+
|  c|    3|
+---+-----+