我正在尝试创建一个小应用程序,它将帮助我通过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