如何在数据帧中应用groupBy而不删除Pyspark中notgrouped实例的其他列?

2021-05-13 14:57:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在Pyspark中使用groupBy()生成一个操作,但是我遇到了下一个问题:

我有一个dataframe(df1),它有3个属性:attrA、attrB和attrC。我只想在数据帧上应用groupBy操作,只考虑attrA和attrB属性。当然,当groupBy(attr1,attr2)应用于df1时,它会生成一组彼此相等的实例。在

我想要的是:

如果我应用groupBy()操作,并且一些实例相等,我想用这些组生成一个独立的数据帧,如果有不相等的实例,那么我希望在另一个具有3个属性的数据帧中保存这些实例:attr1、attr2和attr3(不用于groupBy)。在

有可能吗?在

1条回答
网友
1楼 ·
from pyspark.sql import functions as f
from pyspark.sql import *

spark = SparkSession.builder.appName('MyApp').getOrCreate()

df = spark.createDataFrame([('a', 'a', 3), ('a', 'c', 5), ('b', 'a', 4), ('c', 'a', 2), ('a', 'a', 9), ('b', 'a', 9)],
                           ('attr1', "attr2", "attr3"))
df = df.withColumn('count', f.count('attr3').over(Window().partitionBy('attr1', 'attr2'))).cache()

输出:

^{pr2}$

以及

an_independent_dataframe = df.filter(df['count'] > 1).groupBy('attr1', 'attr2').sum('attr3')
+  -+  -+     +                                                        
|attr1|attr2|sum(attr3)|
+  -+  -+     +
|    b|    a|        13|
|    a|    a|        12|
+  -+  -+     +


another_dataframe = df.filter(df['count'] == 1).select('attr1', "attr2", "attr3")
+  -+  -+  -+
|attr1|attr2|attr3|
+  -+  -+  -+
|    a|    c|    5|
|    c|    a|    2|
+  -+  -+  -+

相关问题