У меня есть функция test (), которая возвращает список кортежей, и конечная цель - напечатать в файле содержимое кортежа с именем «test»
[('thing ',1), («test», ['line1', 'line2', 'line3']), ('thingelse ', 3)]
logs = sc.textFile("s3://my-bucket/file.txt")
rdd = logs.mapPartitions(lambda x: test()).reduceByKey(lambda a, b: a + b)).map(lambda (a, b): b if a == "test" else "").flatMap(lambda x: x)
rdd.collect()
[' line1 ', 'line2', 'line3', 'line1', 'line2', 'line3']
Я пытаюсь записать все элементы этого СДР в файл
rdd.saveAsTextFile("s3://bucket/key/)
это работает, и Sparks создал множество файлов деталей (215 файлов, если быть точным), но все они пусты, кроме 1 из 1.2 Гб, в котором есть все данные
line1
line2
line3
line1
line2
line3
Это нормальное поведение?Я думал, что Spark будет парализовать записи, и каждый работник получит раздел?Почему данные записываются только в 1 файл?
У меня есть чек с rdd.getNumPartitions()
, и он печатает 215.