我有以下Spark数据框:
column1|column2
A|"1"
A|"1"
A|"2"
B|"1"
,我想获取按column1分组的每个不同值的计数。预期的输出将是这样的:
column1|column2
A|"1:2,2:1"
B|"1:1"
这里有帮助吗?
答案 0 :(得分:0)
更简单的方法是按column1和column2分组:
df2 = df.groupBy(df.column1, df.column2).count()
所以您会得到类似的东西:
column1 | column2 | count
A | "1" | 2
A | "2" | 1
B | "1" | 1
这是处理所需数据集的最简单方法。如果需要数据集,现在可以串联column2
和count
,然后再按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]|
+-------+----------+