#python #apache-spark #pyspark #rdd
#python #apache-spark #pyspark #rdd
Вопрос:
Я пытаюсь создать парный 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.
Ответ №1:
Вы можете использовать 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)]