У меня небольшая программа Scala, которая отлично работает на одном node. Однако я масштабирую его, так что он работает на нескольких узлах. Это моя первая такая попытка. Я просто пытаюсь понять, как RDD работают в Spark, поэтому этот вопрос основан на теории и может быть не на 100% правильным.
Скажем, я создаю RDD:
val rdd = sc.textFile(file)
Теперь, когда я это сделал, значит ли это, что файл в file
теперь разделен по узлам (если все узлы имеют доступ к пути к файлу)?
Во-вторых, я хочу подсчитать количество объектов в RDD (достаточно просто), однако мне нужно использовать это число в вычислении, которое должно быть применено к объектам в RDD - пример псевдокода:
rdd.map(x => x / rdd.size)
Скажем, есть 100 объектов в rdd
и говорят, что есть 10 узлов, поэтому количество 10 объектов на node (при условии, что это так работает концепция RDD), теперь, когда я вызываю метод, каждый node будет выполнять расчет с rdd.size
как 10
или 100
? Поскольку, в общем случае, размер RDD 100
, но локально на каждом node равен всего 10
. Должен ли я сделать переменную широковещания до выполнения расчета? Этот вопрос связан с вопросом ниже.
Наконец, если я сделаю преобразование в RDD, например. rdd.map(_.split("-"))
, а затем мне нужен новый size
RDD, мне нужно выполнить действие на RDD, например count()
, поэтому вся информация отправляется обратно во драйвер node?