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