pyspark - 聚合在一列字符串 Pyspark
问题描述
我有以下 Spark 数据框:
column1|column2
A|"1"
A|"1"
A|"2"
B|"1"
我想获得按 column1 分组的每个不同值的计数。预期的输出将是这样的:
column1|column2
A|"1:2,2:1"
B|"1:1"
这里有什么帮助吗?
解决方案
使用 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]|
+-------+----------+
推荐阅读
- node.js - 为什么 findByIdAndUpdate() 函数不起作用
- high-availability - 2 DC之间的CEPH HA
- android - RecyclerView 项目装饰的负边距
- eclipse - 是否有用于获取 Eclipse 包的二进制下载的 API?
- node.js - 根据 MongoDB 中此数组中的条件元素编号推送数组中的元素
- zip - 如何手动读取 zip 文件头
- javascript - 第 1 行的词汇错误:无法识别的文本。错误区域:1:--header-height ^....^ CompileError: Begins at CSS selector undefined
- python - 如何逐块读取大的 Azure blob 存储文件
- woocommerce - Woocommerce 产品折扣简码
- java - CSVPrinter 仅从标题中删除引号