2015-01-21 2 views

ответ

10

В Spark вы можете назвать «дорогие» операции: все те, которые требуют перетасовки (реорганизация данных), попадают в эту категорию. Проверка наличия ShuffleRDD на результат rdd.toDebugString отдает их.

Если вы имеете в виду «осторожность», как «с потенциалом, вызывающих проблемы», некоторые операции в Спарк будет вызывать проблемы, связанные с памятью при использовании без ухода:

  • groupByKey требует, чтобы все значения, подпадающие под один ключ для размещения в памяти у одного исполнителя. Это означает, что большие наборы данных, сгруппированные с ключами с низкой мощностью, могут привести к сбою в выполнении задания. (думаю, allTweets.keyBy(_.date.dayOfTheWeek).groupByKey -> bumm)
    • Одобрить использование aggregateByKey или reduceByKey, чтобы применить уменьшение стороны карты, прежде чем собирать значения для ключа.
  • collect материализует RDD (вычисление сил) и отправляет все данные водителю. (Думает allTweets.collect -> Бумм)
    • Если вы хотите, чтобы вызвать вычисление РДА, благоприятствуют использование rdd.count
    • Чтобы проверить данные ваш РД, использование ограниченных операции, как rdd.first (первый элемент) или rdd.take(n) для п элементов
    • Если вам действительно нужно сделать collect, используйте rdd.filter или rdd.reduce уменьшить его мощность
  • collectAsMap просто collect за кулисами
  • cartesian: создает продукт одного RDD с другим, потенциально создавая очень большой RDD. oneKRdd.cartesian(onekRdd).count = 1000000
    • Рассмотрите возможность добавления ключей и join, чтобы объединить 2 rdds.
  • другие?

В целом, имея представление об объеме данных, проходящих через этапы работы Spark, и о том, что каждая операция будет с ним делать, поможет вам сохранить умственный разум.

+0

Вы в основном попадаете в точки, которые сразу приходят на ум: перетасовка, ограничения в памяти и сбор драйвером – javadba

+0

@maasg, это отлично, спасибо. –