聚集在一串字符串Pyspark

时间:2019-12-27 16:28:53

标签: pyspark pyspark-dataframes

我有以下Spark数据框:

column1|column2
A|"1"
A|"1"
A|"2"
B|"1"

,我想获取按column1分组的每个不同值的计数。预期的输出将是这样的:

column1|column2
A|"1:2,2:1"
B|"1:1"

这里有帮助吗?

2 个答案:

答案 0 :(得分:0)

更简单的方法是按column1和column2分组:

df2 = df.groupBy(df.column1, df.column2).count()

所以您会得到类似的东西:

column1 | column2 | count 
A       | "1"     | 2 
A       | "2"     | 1 
B       | "1"     | 1

这是处理所需数据集的最简单方法。如果需要数据集,现在可以串联column2count,然后再按column1进行分组,并合并组元素。

答案 1 :(得分:0)

使用groupby column1, column2来计算不同的值,然后再次使用column1进行groupby并收集对column2:count的列表。像这样:

data = [("A", "1"), ("A", "1"),
        ("A", "2"), ("B", "1")]
df = spark.createDataFrame(data, ["column1", "column2"])

df.groupBy("column1", "column2").agg(count("*").alias("ct")) \
    .groupBy("column1") \
    .agg(collect_list(concat(col("column2"), lit(":"), col("ct"))).alias("result")) \
    .drop("column2", "ct")\
    .show() 

礼物:

+-------+----------+
|column1|    result|
+-------+----------+
|      B|     [1:1]|
|      A|[1:2, 2:1]|
+-------+----------+