- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
最终,我想将 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 DB 的速度很慢。
我的解决方案:
有documentation这表明 COPY 命令(带有“DIRECT”关键字)是将大量数据加载到数据库的最有效方法。由于我正在寻找 python 解决方案,因此我使用了 Uber 的 vertica-python package这使我能够与 Vertica DB 建立连接并发送要执行的 Vertica 命令。
我想利用 COPY 命令的效率,但数据位于 Vertica 集群之外的某个位置。我需要将数据从 Spark 集群发送到 Vertica DB。幸运的是,HDFS 有一种方法可以做到这一点(请参阅 here )。我决定将数据帧转换为 csv 文件并将其保存在 HDFS 上。然后我将 COPY 命令发送到 Vertica DB 以从 HDFS 获取文件。
我的代码如下(假设我已经有一个存储 pyspark 数据帧的变量。我们称之为“df”):
import vertica_python as VertPy
df.toPandas().to_csv(hdfs_table_absolute_filepath, header=False, index=False)
conn_info = {
'host': ['your-host-here']
'port': [port #],
'user': ['username'],
'password': ['password'],
'database': ['database']
}
conn = VertPy.connect(**conn_info)
cur = conn.cursor()
copy_command = create_copy_command(table_name, hdfs_table_relative_filepath)
cursor.execute(copy_command)
def create_copy_command(table_name, table_filepath):
copy_command = "COPY " + table_name + " SOURCE Hdfs(url='http://hadoop:50070/webhdfs/v1" + table_filepath + "', username='root') DELIMITER ',' DIRECT ABORT ON ERROR"
return copy_command
关于python - 为什么从 Spark 写入 Vertica DB 比从 Spark 写入 MySQL 需要更长的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36725645/
所以我的问题是: 为什么(以及如何避免)C# 中的 Is 运算符的生命周期比 if 中使用的更长? 例子: Animal a = new Cat(); if (a is Cat c) { Co
我遇到了这个问题,我已经尝试解决了很长一段时间。理想情况下,我希望 particles.js 的“生成框”向下延伸到页面底部(由 fullpage.js 计算的 7 x viewport),这样当使用
我想让一个 div(我的侧边栏)延伸到页面底部。我知道我需要添加“高度:100%;”为了做到这一点。 但是当我添加 height: 100%; 时,内容少于侧边栏的页面会降低侧边栏的高度,然后您就看不
只有我这么认为吗,还是在 SQL Server 2008 Management Studio 中扩展数据库列表比在 SQL Server 2005 Management Studio 中扩展数据库列表
我是一名优秀的程序员,十分优秀!