Spark: передача широковещательной переменной исполнителям

Я передаю широковещательную переменную всем своим исполнителям, используя следующий код. Код вроде работает, но я не знаю, достаточно ли хорош мой подход. Просто хочу посмотреть, есть ли у кого-нибудь лучшие предложения. Большое спасибо!

val myRddMap = sc.textFile("input.txt").map(t => myParser.parse(t))
val myHashMapBroadcastVar = sparkContext.broadcast(myRddMap.collect().toMap)

где myRddMap имеет тип org.apache.spark.rdd.RDD[(String, (String, String))]

Затем у меня есть служебная функция, которую я передаю в RDD и переменных, таких как:

val myOutput = myUtiltityFunction.process(myRDD1, myHashMapBroadcastVar)

Так является ли приведенный выше код хорошим способом обработки широковещательных переменных? Или есть лучший подход? Спасибо!


person Edamame    schedule 24.06.2015    source источник
comment
Мне кажется, все в порядке. Одно замечание: если данные умещаются на одной машине (она умещается, если вы можете collect их), то нет необходимости загружать их в RDD. Вы можете загрузить и проанализировать его без Spark и избежать некоторых накладных расходов.   -  person Daniel Darabos    schedule 24.06.2015


Ответы (1)


Широковещательные переменные позволяют программисту хранить переменную только для чтения в кэше на каждой машине, а не отправлять ее копию с задачами.

Широковещательные переменные фактически отправляются на все узлы. Так что не имеет значения, используете ли вы их в служебной функции или где-либо еще. Что касается того, что я думаю, что вы поступаете правильно, нет ничего плохого, что привело бы к плохой работе.

person Zia Kiyani    schedule 24.06.2015