有什么办法可以加快写入python中的csv时间吗?

时间:2016-05-24 14:50:27

标签: python csv hadoop hive

我正在尝试创建一个小应用程序,它将帮助我通过hiveserver2从Hadoop中提取数据,只需将其写入CSV即可。目前,从包含203列的500k行的hs2表中抽取10,000条记录大约需要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 = []

迭代每个单独的字典键并附加到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

0 个答案:

没有答案