spark 比 mysql慢_为什么从Spark到Vertica DB的写入比从Spark到MySQL需要更长的时间?...

我想出了另一个解决办法。在深入研究之前,我将解释我发现了什么,以及为什么我认为Vertica DB的保存速度很慢。在Vertica日志(搜索文件)垂直木“在Vertica机器上)包含与Vertica DBs读/写相关的所有最近日志。运行write命令后,我发现这实际上是在Vertica数据库中创建INSERT语句。在

INSERT语句(没有“DIRECT”指令)速度很慢,因为它们被写入WOS(RAM)而不是ROS(磁盘)。我不知道为什么会这样。写操作发出了单独的INSERT语句

我的解决方案:

有一个documentation表示COPY命令(带有“DIRECT”关键字)是将大量数据加载到数据库的最有效方法。因为我在寻找python解决方案,所以我使用了Uber的vertica pythonpackage,它允许我与vertica数据库建立连接并发送vertica命令来执行。在

我想利用COPY命令的效率,但是数据位于Vertica集群之外的某个地方。我需要把我的Spark集群的数据发送到Vertica数据库。幸运的是,HDFS有一种方法可以做到这一点(参见here)。我决定将数据帧转换为csv文件并保存在HDFS上。然后我向Vertica数据库发送COPY命令,从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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值