gpt4 book ai didi

java - Spark 将数组列分解为列

转载 作者:行者123 更新时间:2023-12-04 16:23:15 25 4
gpt4 key购买 nike

我在 Java 中使用 Spark,我有一个像这样的数据框:

id  | array_column
-------------------
12 | [a:123, b:125, c:456]
13 | [a:443, b:225, c:126]
我想用相同的 id 爆炸 array_column,但是 explode 还不够,因为我希望数据帧是:
id  | a  | b  | c
-------------------
12 |123 |125 | 456
13 |443 |225 | 126
因此,在这种情况下, explode 上的普通 array_column 效果不佳。
很高兴得到您的帮助,谢谢!

最佳答案

一种非常相似的方法,例如 ggordon 在 Java 中的回答:

import static org.apache.spark.sql.functions.*;

Dataset<Row> df = ...

df.withColumn("array_column", explode(col("array_column")))
.withColumn("array_column", split(col("array_column"), ":"))
.withColumn("key", col("array_column").getItem(0))
.withColumn("value", col("array_column").getItem(1))
.groupBy(col("id"))
.pivot(col("key"))
.agg(first("value")) //1
.show();
输出:
+---+---+---+---+
| id| a| b| c|
+---+---+---+---+
| 12|456|225|126|
| 11|123|125|456|
+---+---+---+---+
我假设 id 和 数组中的键字段的组合是唯一的。这就是 //1 使用的聚合函数是 first 的原因。如果此组合不是唯一的,则可以将聚合函数更改为 collect_list 以获得所有匹配值的数组。

关于java - Spark 将数组列分解为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69361583/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com