Какие операции и/или методы необходимо соблюдать в Apache Spark? Я слышал, что вы должны быть осторожны:Операции и методы, чтобы быть осторожными в Apache Spark?
groupByKey
collectAsMap
Почему?
Есть ли другие методы?
Какие операции и/или методы необходимо соблюдать в Apache Spark? Я слышал, что вы должны быть осторожны:Операции и методы, чтобы быть осторожными в Apache Spark?
groupByKey
collectAsMap
Почему?
Есть ли другие методы?
В 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, и о том, что каждая операция будет с ним делать, поможет вам сохранить умственный разум.
Вы в основном попадаете в точки, которые сразу приходят на ум: перетасовка, ограничения в памяти и сбор драйвером – javadba
@maasg, это отлично, спасибо. –