在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个字符拆分字符串?(