#apache-spark #rdd
#apache-spark #rdd
Вопрос:
Я использую Apache Spark для извлечения записей из базы данных и после некоторых преобразований записываю их в AWS S3. Теперь я также хочу подсчитать количество записей, которые я записываю в S3, и для этого я делаю
rdd.count() and then
rdd.write()
Таким образом, все преобразования выполняются дважды и создают проблемы с производительностью.
Можно ли каким-либо образом этого добиться, пока выполнение преобразований больше не будет выполняться?
Ответ №1:
Два действия — подсчет и запись означают 2 набора чтения.
Предполагая что-то вроде этого:
val rdd = sc.parallelize(collectedData, 4)
затем, добавив .cache
:
val rdd = sc.parallelize(collectedData, 4).cache
это позволит избежать 2-го набора повторного чтения в целом, но не всегда. Вы также можете посмотреть persist
и уровни. Конечно, кэширование также имеет накладные расходы, и это зависит от размеров в игре.
Визуализация DAG в пользовательском интерфейсе Spark покажет зеленый сегмент или точку, что означает, что было применено кэширование.