簡體   English   中英

如何在數據框中應用groupBy而不刪除Pyspark中未分組實例的其他列?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM