具有聚合唯一值的pyspark dataframe groupby [重复]
Posted
技术标签:
【中文标题】具有聚合唯一值的pyspark dataframe groupby [重复]【英文标题】:pyspark dataframe groupby with aggregate unique values [duplicate] 【发布时间】:2022-01-17 00:01:32 【问题描述】:我查找了与 pandas df.groupby(upc)['store'].unique()
等效的 pyspark 的任何参考,其中 df 是 pandas 中的任何数据框。
请使用这段代码在 Pyspark 中创建数据框
from pyspark.sql.types import StructType,StructField, StringType, IntegerType
from pyspark.sql import *
from datetime import date
import pyspark.sql.functions as F
spark = SparkSession.builder.appName('SparkByExamples.com').getOrCreate()
data2 = [("36636","M",3000),
("40288","M",4000),
("42114","M",3000),
("39192","F",4000),
("39192","F",2000)
]
schema = StructType([ \
StructField("upc", StringType(), True), \
StructField("store", StringType(), True), \
StructField("sale", IntegerType(), True) \
])
df = spark.createDataFrame(data=data2,schema=schema)
我知道 pyspark groupby unique_count,但需要有关 unique_values 的帮助
【问题讨论】:
请查看 pyspark 中的collect_set
聚合。
这能回答你的问题吗? pyspark collect_set or collect_list with groupby
是的,这是类似的问题,但作者对问题的措辞不同。
【参考方案1】:
您可以使用collect_set 获取唯一值
from pyspark.sql import functions as F
from pyspark.sql.functions import col
df_group = df.groupBy('upc').agg(F.collect_set(col('store')))
【讨论】:
【参考方案2】:您可以应用collect_set
聚合来收集列中的唯一值。请注意,collect_set
会忽略 null
值。
df.groupBy("upc").agg(F.collect_set("store")).show()
输出
+-----+------------------+
| upc|collect_set(store)|
+-----+------------------+
|42114| [M]|
|40288| [M]|
|39192| [F]|
|36636| [M]|
+-----+------------------+
【讨论】:
以上是关于具有聚合唯一值的pyspark dataframe groupby [重复]的主要内容,如果未能解决你的问题,请参考以下文章
将具有最接近值的列添加到 PySpark Dataframe
pyspark - 使用 RDD 进行聚合比 DataFrame 快得多