如何在pyspark dataframe中进行分组而不进行聚合
我有一个非常大的数据集,我需要使用pyspark dataframe。请参阅数据的简化版本:如何在pyspark dataframe中进行分组而不进行聚合,dataframe,apache-spark,pyspark,group-by,apache-spark-sql,Dataframe,Apache Spark,Pyspark,Group By,Apache Spark Sql,我有一个非常大的数据集,我需要使用pyspark dataframe。请参阅数据的简化版本: product_type series_no product_amount date 514 111 20 2020/01/01 (YYYY/MM/DD) 514 111 30 2020/01/02 514 111
product_type series_no product_amount date
514 111 20 2020/01/01 (YYYY/MM/DD)
514 111 30 2020/01/02
514 111 40 2020/01/03
514 111 50 2020/01/04
514 112 60 2020/01/01
514 112 70 2020/01/02
514 112 80 2020/01/03
我正在尝试使用(产品类型
,系列号
)对这些数据进行分组,以获得不进行聚合的数据组。对于此简化版本的数据,我们有两个组:
group1:
514 111 20 2020/01/01
514 111 30 2020/01/02
514 111 40 2020/01/03
514 111 50 2020/01/04
group2:
514 112 60 2020/01/01
514 112 70 2020/01/02
514 112 80 2020/01/03
有没有办法用pyspark dataframe获取这些组。数据非常庞大,如果我将它们全部转换为python,就会抛出内存错误。我试图用下面给出的伪代码来表示组:
假设数据存储在df_all pyspark数据帧上
for group in df_all.groups:
// convert to pandas dataframe.
请告诉我是否有任何有效的方法可以使用pyspark dataframe完成此操作。您可以这样获得您的组。首先,收集
产品类型
和系列号
列的不同值,然后循环这些值并过滤原始数据框:
for group in df_all.groups:
// convert to pandas dataframe.
from pyspark.sql.functions import col
groups = list(map(
lambda row: (row.product_type, row.series_no),
df.select("product_type", "series_no").distinct().collect()
))
for group in groups:
# replace here with your logic
print(f"Group: product_type={group[0]} and series_no={group[1]}")
df.filter((col("product_type") == group[0]) & (col("series_no") == group[1])).show()
#Group: product_type=514 and series_no=112
#+------------+---------+--------------+----------+
#|product_type|series_no|product_amount| date|
#+------------+---------+--------------+----------+
#| 514| 112| 60|2020/01/01|
#| 514| 112| 70|2020/01/02|
#| 514| 112| 80|2020/01/03|
#+------------+---------+--------------+----------+
#Group: product_type=514 and series_no=111
#+------------+---------+--------------+----------+
#|product_type|series_no|product_amount| date|
#+------------+---------+--------------+----------+
#| 514| 111| 20|2020/01/01|
#| 514| 111| 30|2020/01/02|
#| 514| 111| 40|2020/01/03|
#| 514| 111| 50|2020/01/04|
#+------------+---------+--------------+----------+
你说的“团体”是什么意思?请将预期结果添加为表格,如果仍然不清楚,请告诉我。为了清楚地解释,我添加了一些部分。非常感谢。这应该比使用groupBy更快、更经济吗@blackbishop@vr13实际上,我们无法进行比较,因为它不能取代groupBy。OP希望基于组将原始数据帧拆分为多个数据帧。与groupBy无关。