首页 > 解决方案 > 聚合在一列字符串 Pyspark

问题描述

我有以下 Spark 数据框:

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

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

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

这里有什么帮助吗?

标签: pysparkpyspark-dataframes

解决方案


使用 groupbycolumn1, column2计算不同的值,然后再次使用 groupbycolumn1并收集对列表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]|
+-------+----------+

推荐阅读