从字符列表创建对 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)]