gpt4 book ai didi

python - 使用 map 迭代 PySpark 中的数组列

转载 作者:行者123 更新时间:2023-12-01 00:49:26 27 4
gpt4 key购买 nike

在 PySpark 中,我有一个由两列组成的数据框:

+-----------+----------------------+
| str1 | array_of_str |
+-----------+----------------------+
| John | [mango, apple, ... |
| Tom | [mango, orange, ... |
| Matteo | [apple, banana, ... |

我想添加一列concat_result包含 array_of_str 内每个元素的串联里面有字符串 str1专栏。

+-----------+----------------------+----------------------------------+
| str1 | array_of_str | concat_result |
+-----------+----------------------+----------------------------------+
| John | [mango, apple, ... | [mangoJohn, appleJohn, ... |
| Tom | [mango, orange, ... | [mangoTom, orangeTom, ... |
| Matteo | [apple, banana, ... | [appleMatteo, bananaMatteo, ... |

我正在尝试使用map迭代数组:

from pyspark.sql import functions as F
from pyspark.sql.types import StringType, ArrayType

# START EXTRACT OF CODE
ret = (df
.select(['str1', 'array_of_str'])
.withColumn('concat_result', F.udf(
map(lambda x: x + F.col('str1'), F.col('array_of_str')), ArrayType(StringType))
)
)

return ret
# END EXTRACT OF CODE

但我得到错误:

TypeError: argument 2 to map() must support iteration

最佳答案

您只需要进行一些小的调整即可实现此功能:

from pyspark.sql.types import StringType, ArrayType
from pyspark.sql.functions import udf, col

concat_udf = udf(lambda con_str, arr: [x + con_str for x in arr],
ArrayType(StringType()))
ret = df \
.select(['str1', 'array_of_str']) \
.withColumn('concat_result', concat_udf(col("str1"), col("array_of_str")))

ret.show()

您不需要使用map,标准列表理解就足够了。

关于python - 使用 map 迭代 PySpark 中的数组列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56689048/

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