将 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|
+---+-----+
我必须在 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|
+---+-----+