簡體   English   中英

我如何應用groupBy()在Pyspark中僅創建多於X個元素的組?

[英]How can I apply groupBy() to only create groups of more than X elements in Pyspark?

我正在嘗試在數據框上應用groupBy()子句以對相等的實例進行分組,但是我希望僅當可以創建包含3個以上元素的組時才應用它。 我的意思是,如果我有兩個相等的實例,我不想將它們分組,但是如果我有兩個以上的相等實例,我想創建一組它們。

我正在使用此代碼創建組,但是我不知道如何更改它來解決我面臨的問題:

dataframe_grouped = dataframe.groupBy(columns)

做一件事提取列

 SeriesName = dataframe_grouped['column_name']

現在檢查該特定字符串在該系列中是否出現。 這里找到語法

從計數中,您將獲得序列數和大於2的序列數,將其放入不同的序列中,然后將該序列添加到數據框中。

dataframe_grouped['new_column'] = newSeries

然后在該新列dataframe.groupBy(new_column)上執行分組

以數據框為例

>>> a = [("foo",3),("foo",11),("foo",22),("bar",3),("foo",5)]
>>> df = spark.createDataFrame(a,["name","value"])
>>> df.show()
+----+-----+
|name|value|
+----+-----+
| foo|    3|
| foo|   11|
| foo|   22|
| bar|    3|
| foo|    5|
+----+-----+

對groupBy()之后的出現次數應用過濾器

>>> df2 = df.groupBy(df.name).count().filter("count>3").show()
>>> df2.show()
+----+-----+
|name|count|
+----+-----+
| foo|    4|
+----+-----+

然后,您可以使用df2的“名稱”列中的元素,並將它們與df1的“名稱”列中的元素連接在一起。 因此df3將是一個數據幀,其中只有相等實例高於3的元素。

>>> df3 = df.join(df2, df.name == df2.name).select(df2.name, df.value)
>>> df3.show()
+----+-----+
|name|value|
+----+-----+
| foo|    3|
| foo|   11|
| foo|   22|
| foo|    5|
+----+-----+

如果您使用df3,則可以使用groupBy(),並且將具有groupedData,其中每個“名稱”包含3個以上的元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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