![](/img/trans.png)
[英]How can I concatenate the rows in a pyspark dataframe with multiple columns using groupby and aggregate
[英]How can I apply groupBy in a dataframe without removing other columns of the not-grouped instances in Pyspark?
我正在嘗試使用Pyspark中的groupBy()生成一個操作,但是出現了下一個問題:
我有一個數據幀(df1),它具有3個屬性:attrA,attrB和attrC。 我只想考慮屬性attrA和attrB對該數據框應用groupBy操作。 當然,當在df1上應用groupBy(attr1,attr2)時,它將生成這些實例彼此相等的組。
我想要得到的是:
如果我應用groupBy()操作並且某些實例相等,那么我想用這些組生成一個獨立的數據幀,並且如果存在不相等的實例,則沒有其他任何實例,我想將它們保存在具有3個屬性的另一個數據幀中: attr1,attr2和attr3(不用於分組依據)。
可能嗎?
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()
輸出:
+-----+-----+-----+-----+
|attr1|attr2|attr3|count|
+-----+-----+-----+-----+
| b| a| 4| 2|
| b| a| 9| 2|
| a| c| 5| 1|
| c| a| 2| 1|
| a| a| 3| 2|
| a| a| 9| 2|
+-----+-----+-----+-----+
和
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|
+-----+-----+-----+
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.