我正在尝试创建一个小应用程序,它将帮助我通过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
暂无答案!
目前还没有任何答案,快来回答吧!