Создание пары RDDS из списка символов

#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)]