В конечном счете, я хочу получить данные из базы данных Vertica в Spark, обучить модель машинного обучения, сделать прогнозы и сохранить эти прогнозы в другой базе данных Vertica.
Текущая проблема заключается в выявлении узкого места в последней части потока: сохранении значений в БД Vertica из Spark. Для хранения 63 тыс. строк данных в базе данных Vertica требуется около 38 минут. Для сравнения, когда я переношу те же данные из Spark в базу данных MySQL, это занимает 10 секунд.
Не знаю, почему такая огромная разница.
У меня есть классы VerticaContext и MySQLContext для соединений Vertica и MySQL соответственно. Оба класса используют SQLContext для чтения записей в формате jdbc.
df = self._sqlContext.read.format('jdbc').options(url=self._jdbcURL, dbtable=subquery).load()
И писать с помощью jdbc.
df.write.jdbc(self._jdbcURL, table_name, save_mode)
Между этими двумя классами нет никакой разницы, кроме записи в другую целевую базу данных. Я не понимаю, почему существует огромная разница во времени, необходимом для сохранения таблиц. Это из-за внутренней разницы в оборудовании между двумя разными базами данных?