从字符列表创建对 RDD
Create pair RDDs from list of characters
我正在尝试创建一个成对的 RDD,其中的键来自 RDD,而值都为 1。
例如,如果有人要导入字符串 "hello world!"
并将其并行化到 RDD 中,输出将是:('h', 1), ('e', 1), ('l', 1), ('l', 1),...
到目前为止,我已经写了:
keyRDD = characterRDD.map(lambda x: (x, 1))
这导致输出 (['h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd,' '!'], 1)
。接近,但不是我要找的。
我也尝试过使用 for 循环,但在尝试迭代 RDD 时收到错误。
您可以将 flatMap
与列表理解一起使用:
rdd = sc.parallelize(["hello world!"])
rdd = rdd.flatMap(lambda s: [(l, 1) for l in s if l != ' '])
print(rdd.collect())
#[('h', 1), ('e', 1), ('l', 1), ('l', 1), ('o', 1), ('w', 1), ('o', 1), ('r', 1), ('l', 1), ('d', 1), ('!', 1)]
我正在尝试创建一个成对的 RDD,其中的键来自 RDD,而值都为 1。
例如,如果有人要导入字符串 "hello world!"
并将其并行化到 RDD 中,输出将是:('h', 1), ('e', 1), ('l', 1), ('l', 1),...
到目前为止,我已经写了:
keyRDD = characterRDD.map(lambda x: (x, 1))
这导致输出 (['h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd,' '!'], 1)
。接近,但不是我要找的。
我也尝试过使用 for 循环,但在尝试迭代 RDD 时收到错误。
您可以将 flatMap
与列表理解一起使用:
rdd = sc.parallelize(["hello world!"])
rdd = rdd.flatMap(lambda s: [(l, 1) for l in s if l != ' '])
print(rdd.collect())
#[('h', 1), ('e', 1), ('l', 1), ('l', 1), ('o', 1), ('w', 1), ('o', 1), ('r', 1), ('l', 1), ('d', 1), ('!', 1)]