Ответ 1
...ec2.internal.warc.gz
Я думаю, что вы столкнулись с довольно типичной проблемой с gzipped файлами, поскольку они не могут быть загружены параллельно. Более конкретно, один gzipped файл не может быть загружен параллельно несколькими задачами, поэтому Spark загрузит его с 1 задачей и, таким образом, предоставит вам RDD с 1 разделом.
(Обратите внимание, однако, что Spark может загружать 10 gzipped файлов параллельно, просто так, что каждый из этих 10 файлов может быть загружен только одной задачей. Вы все равно можете получить parallelism через файлы, просто не в пределах файл.)
Вы можете подтвердить, что у вас есть только 1 раздел, явно указав количество разделов в вашем RDD:
data.getNumPartitions()
Верхняя граница числа задач, которые могут выполняться параллельно на RDD, - это количество разделов в RDD или количество ведомых ядер в вашем кластере, в зависимости от того, что меньше.
В вашем случае это количество разделов RDD. Это можно увеличить, перераспределив ваш RDD следующим образом:
data = sc.textFile(bucket).repartition(sc.defaultParallelism * 3)
Почему sc.defaultParallelism * 3
?
Руководство по настройке Spark рекомендует иметь 2-3 задания на ядро , а sc.defaultParalellism
- количество ядер в вашем кластере.