聚合一列字符串 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
这将是处理所需数据集的最简单方法。如果你想要你的数据集,你现在可以连接 column2
和 count
,然后再次按 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]|
+-------+----------+
我有以下 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
这将是处理所需数据集的最简单方法。如果你想要你的数据集,你现在可以连接 column2
和 count
,然后再次按 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]|
+-------+----------+