【发布时间】:2019-06-21 14:57:47
【问题描述】:
在 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
【问题讨论】:
-
我试过那个解决方案,它不起作用。如果你能写一个有效的,将不胜感激。
-
你需要用 2 个参数定义一个
udf- (也许除非你在 spark 2.4+ 中)
标签: python apache-spark pyspark