聚合一列字符串 Pyspark

Aggregate over a column of strings Pyspark

我有以下 Spark 数据框:

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

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

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

这里有什么帮助吗?

更简单的方法是按第 1 列和第 2 列分组:

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

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

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

这将是处理所需数据集的最简单方法。如果你想要你的数据集,你现在可以连接 column2count,然后再次按 column1 分组并连接组元素。

使用 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]|
+-------+----------+