如何在Pyspark中逐元素连接两个ArrayType(StringType())列?

问题描述 投票:0回答:3

我在spark数据帧中有两ArrayType(StringType())列,并且我想按元素方式将这两列连接起来:

输入

+---------+---------+
|col1     |col2     |
+---------+---------+
|['a','b']|['c','d']|
+---------+---------+

输出

+---------+---------+------------+
|col1     |col2     |col3        |
+---------+---------+------------+
|['a','b']|['c','d']|['ac', 'bd']|
+---------+---------+------------+

谢谢。

apache-spark pyspark pyspark-sql pyspark-dataframes
3个回答
3
投票

对于Spark 2.4+,您可以使用transform函数,如下所示:

transform

col3_expr = "transform(col1, (x, i) -> concat(x, col2[i]))" df.withColumn("col3", expr(col3_expr)).show() 函数将第一数组列transform作为参数,对其元素进行迭代,并应用lambda函数col1,其中(x, i) -> concat(x, col2[i])是实际元素,而x是用于从中获取相应元素的索引数组i

给予:

col2

或更高级的+------+------+--------+ | col1| col2| col3| +------+------+--------+ |[a, b]|[c, d]|[ac, bd]| +------+------+--------+ 函数更简单:

zip_with

0
投票

它并不会真正扩展,但是您可以在每个数组中获得zip_withdf.withColumn("col3", expr("zip_with(col1, col2, (x, y) -> concat(x, y))")) 条目,然后说0th1st,然后是col3。将所有4个条目设置为单独的值,然后将它们组合输出。


0
投票

这里是一个通用答案。只需查看结果即可。 2个相等大小的数组,因此两个元素均为n个元素。

a[0] + b[0]

返回:

a[1] + b[1]

© www.soinside.com 2019 - 2024. All rights reserved.