对于pyspark中lambda内部的循环



在pyspark中使用rdd.map(lambda x:…..(,我需要编写一个lambda函数来格式化字符串。

例如,我有一个字符串"abcdefgh">,并且在每两个符号之后的列的每一行中-"为了得到";ab-cd-ef-gh">

我如何使用这样的代码和正确的pyspark语法来实现它:

df.rdd.map(lambda x: ((for i in range(10): x[i+2:2] + "-"),)).toDF()

映射函数中存在一些语法错误。试试这个:

sc = spark.sparkContext
rdd = sc.parallelize(["abcdefg", "hijklmno"])  
rdd.collect()
# Out: ['abcdefg', 'hijklmno']
rdd.map(lambda x: '-'.join([x[i:i+2] for i in range(0, len(x), 2)])).collect()
# Out:['ab-cd-ef-g', 'hi-jk-lm-no']

或者:

from  itertools import zip_longest
rdd.map(lambda x: '-'.join(map(''.join, zip_longest(*[iter(x)]*2, fillvalue='')))) 
.collect()
# Out: ['ab-cd-ef-g', 'hi-jk-lm-no']

甚至更短:

from textwrap import wrap
rdd.map(lambda x: '-'.join(wrap(x, 2))).collect()
# Out: ['ab-cd-ef-g', 'hi-jk-lm-no']

(请参阅每隔n个字符拆分字符串?(

最新更新