Список (или итератор) кортежей, возвращаемых MAP (PySpark)
У меня есть метод картографирования:
def mapper(value):
...
for key, value in some_list:
yield key, value
то, что мне нужно, не очень далеко от обычного примера WordCount, на самом деле. У меня уже есть рабочий скрипт, но только если метод mapper выглядит так:
def mapper(value):
...
return key, value
Вот как выглядит его вызов:
sc.textFile(sys.argv[2], 1).map(mapper).reduceByKey(reducer).collect()
Я потратил 2 часа, пытаясь написать код, который бы поддерживал генераторы в mapper. Но не мог этого сделать. Я даже согласен просто вернуть список:
def mapper(value):
...
result_list = []
for key, value in some_list:
result_list.append( key, value )
return result_list
Вот:https://groups.google.com/forum/#!searchin/spark-users/flatmap$ 20multiple / spark-users / 1WqVhRBaJsU / -D5QRbenlUgJ Я обнаружил, что должен использовать flatMap, но это не сработало - мой редуктор начал получать входные данные, такие как (key1, value1, key2, value2, value3, ... ) - но это должно быть [(ключ1, значение1), (ключ2, значение2, значение3) ...]. Другими словами, редуктор начал собирать только отдельные части и не знает, является ли это значением или ключом, а если значением - к какому ключу он принадлежит.
Итак, как использовать мапперы, которые возвращают итераторы или списки?
Спасибо!