【问题标题】:pyspark dataframe groupby with aggregate unique values [duplicate]具有聚合唯一值的pyspark dataframe groupby [重复]
【发布时间】: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 的帮助

【问题讨论】:

标签: python dataframe pyspark group-by


【解决方案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]|
    +-----+------------------+
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-14
      • 2015-07-11
      • 2020-01-05
      • 1970-01-01
      • 2020-01-28
      • 1970-01-01
      相关资源
      最近更新 更多