我在Java中使用Spark,我有一个如下所示的 Dataframe :
id | array_column
-------------------
12 | [a:123, b:125, c:456]
13 | [a:443, b:225, c:126]
我想用相同的id分解array_column
,但是explode
不起作用,因为我想让dataframe变成:
id | a | b | c
-------------------
12 |123 |125 | 456
13 |443 |225 | 126
3条答案
按热度按时间ikfrs5lh1#
以下方法适用于
array_column
中的可变长度列表。该方法使用explode
扩展array_column
中的字符串元素列表,然后使用:
将每个字符串元素分别拆分为两个不同的列col_name
和col_val
。最后,使用带有group by的透视表将数据转置为所需的格式。下面的示例使用了pysparkapi,但是可以很容易地转换为java/scala api,因为它们是类似的。
告诉我这是否适合你。
yhived7q2#
一种非常类似的方法就像gordon在Java中的回答:
输出量:
我假设
id
和数组中的键字段的组合是唯一的,这就是为什么在//1
中使用的聚合函数是first
的原因。如果这个组合不是唯一的,聚合函数可以改为collect_list
,以获得所有匹配值的数组。qhhrdooz3#
从列内的字符串中提取列名称:
输入示例:
脚本: