我能做些什么来加快用python写csv的速度吗?

beq87vna  于 2021-05-29  发布在  Hadoop
关注(0)|答案(0)|浏览(321)

我正在尝试创建一个小应用程序,它将帮助我通过hiveserver2从hadoop中提取数据,只需将数据写入csv即可。目前,从一个包含500k行和203列的hs2表中提取10000条记录大约需要40秒。我想有一种比我现在做的更快、更有效的方法。理想情况下,我希望最终能够拉和写100万行每分钟…它不一定要写到csv。以我目前的技术水平来说,这可能不可行,但我喜欢为自己设定目标。我很感激你们能给我的任何帮助:)。

import pyhs2
import time
import csv

csv_out = open('data.csv', 'wb')
mywriter = csv.writer(csv_out)

正在将用户名和密码存储在自己的函数中。。。

def generic_user():
    gu = 'xxxxxx'
    return gu

def password():
    pw = 'xxxxx'
    return pw

这只是使用pyhs2连接到我的配置单元服务器

with pyhs2.connect(host='xxxxxxxx',
               port=10000,
               authMechanism='PLAIN',
               user=generic_user(),
               password=password(),
               database='xxxxxxx') as conn:

    with conn.cursor() as cur:

考虑小写字母,因为它们会对查询产生不利影响

q = raw_input('Enter query: ').replace('csc', 'CSC')
        print q

        #timer start
        start_time = time.time()

        #Execute query
        cur.execute(q)

创建空列表以存储从字典中提取的列名

col = []

遍历每个单独的字典键并附加到列

for key in cur.getSchema():
            col.append(key['columnName'])

由于某些原因,pyhs2解析字典值的每个字母,所以我不得不将其附加到另一个标题为header的列表中。

header = []
        header.append(col)

最后将每个标题写入csv中的列

for rows in zip(header):
            mywriter.writerows(rows)

把记录列表拉出来,一次写一个

records = cur.fetch()
        for rows in zip(records):
            mywriter.writerows(rows)

只是打印时间来比较性能

pull_time = time.time() - start_time
print pull_time

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题