Python 如何应用groupBy()在Pyspark中仅创建包含X个以上元素的组?

Python 如何应用groupBy()在Pyspark中仅创建包含X个以上元素的组?,python,sql,dataframe,group-by,pyspark,Python,Sql,Dataframe,Group By,Pyspark,我试图在dataframe上应用groupBy()子句来对相等的实例进行分组,但我希望仅当可以创建包含3个以上元素的组时才应用它。我的意思是,如果我有两个相等的实例,我不想将它们分组,但如果我有两个以上的相等实例,我想创建一组 我正在使用此代码创建组,但我不知道如何更改它以解决我面临的问题: dataframe_grouped = dataframe.groupBy(columns) 做一件事,通过 SeriesName = dataframe_grouped['column_name']

我试图在dataframe上应用groupBy()子句来对相等的实例进行分组,但我希望仅当可以创建包含3个以上元素的组时才应用它。我的意思是,如果我有两个相等的实例,我不想将它们分组,但如果我有两个以上的相等实例,我想创建一组

我正在使用此代码创建组,但我不知道如何更改它以解决我面临的问题:

dataframe_grouped = dataframe.groupBy(columns)

做一件事,通过

 SeriesName = dataframe_grouped['column_name']
现在检查该序列中该特定字符串的出现情况。从中查找语法

从计数中,您将得到序列号和大于2的序列号,将它们放入不同的序列中,然后将该序列添加到数据帧中

dataframe_grouped['new_column'] = newSeries

然后对新列数据帧执行groupBy。groupBy(新列)

执行一件事提取该列

 SeriesName = dataframe_grouped['column_name']
现在检查该序列中该特定字符串的出现情况。从中查找语法

从计数中,您将得到序列号和大于2的序列号,将它们放入不同的序列中,然后将该序列添加到数据帧中

dataframe_grouped['new_column'] = newSeries
然后对新列数据帧执行分组依据。例如,分组依据(新列)

数据帧

>>> 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的“name”列的元素,并将它们与df1的“name”列的元素连接起来。 因此,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个以上的元素。例如,Dataframe

>>> 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的“name”列的元素,并将它们与df1的“name”列的元素连接起来。 因此,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个以上的元素。

回答得很好!非常感谢。回答得好!非常感谢。