При уменьшении количества разделов можно использовать coalesce
, что отлично, потому что оно не вызывает перетасовку и, кажется, работает мгновенно (не требуется дополнительный этап задания).
Я хотел бы иногда делать обратное, но repartition
вызывает перетасовку. Я думаю, что несколько месяцев назад я действительно получил эту работу, используя CoalescedRDD
с balanceSlack = 1.0
- так что произойдет, так это разделить раздел так, чтобы результирующие разделы были расположены там, где все на одном и том же node (так малое сетевое IO).
Такая функциональность в Hadoop автоматизирована, а просто изменяет размер разделения. Кажется, что он не работает таким образом в Spark, если не уменьшается количество разделов. Я думаю, что решение может состоять в том, чтобы написать пользовательский разделитель вместе с настраиваемым RDD, где мы определяем getPreferredLocations
... но я думал, что это такая простая и распространенная вещь, что, безусловно, должен быть прямой способ сделать это?
Проверенные вещи:
.set("spark.default.parallelism", partitions)
на моем SparkConf
, и когда в контексте чтения паркета я пробовал sqlContext.sql("set spark.sql.shuffle.partitions= ...
, который на 1.0.0 вызывает ошибку И не хочу, чтобы я хотел, я хочу, чтобы номер раздела изменялся все виды работы, а не просто перетасовки.