【发布时间】:2016-04-19 17:39:44
【问题描述】:
最终,我想将数据从 Vertica DB 抓取到 Spark,训练机器学习模型,进行预测,然后将这些预测存储到另一个 Vertica DB。
当前问题是确定流程最后一部分的瓶颈:将值从 Spark 存储在 Vertica DB 中。在 Vertica DB 中存储 63k 行数据大约需要 38 分钟。相比之下,当我将相同的数据从 Spark 传输到 MySQL 数据库 时,需要 10 秒。
我不知道为什么差异如此之大。
我有分别用于 Vertica 和 MySQL 连接的名为 VerticaContext 和 MySQLContext 的类。这两个类都使用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)
除了写入不同的目标数据库之外,这两个类之间没有区别。我很困惑为什么保存表格所需的时间有很大差异。是不是因为两个不同数据库在硬件上的内在差异?
【问题讨论】:
-
可能是因为 Vertica 是列式数据库?
-
Spark 是在做单次 INSERT 吗?
-
您的问题中的详细信息太少。您的 Vertica 数据库可能未针对您通过 JDBC 执行的涓流插入进行优化。您需要与您的 DBA 交谈。
-
在应用程序端,您可以尝试流式插入,如 here 所述
-
@mustaccio,感谢您的链接。不知道有没有和这个等价的python?
标签: python mysql apache-spark vertica