关于python3操作pyhive缓存输出处理

python3在操作hive的时候,可以采用pyhive的lib,在很多情况下,由于hive的单个表中的数据量比较多,因此在这种情况下,我们需要每次从hive中读取一部分数据,先处理完,然后再次的读取下一部分数据,针对这种情况,pyhive也提供了对应的方法给我们处理,以下是一个对应的例子:

#coding:utf-8

import os
import sys
from pyhive import hive

field_sep_token = b'\x7C\x1C'

def main():
    host = 'xxxx'
    port = 10000
    username = 'hive'
    password = 'xxx'
    dbname = 'default'
    auth = 'LDAP'
    conn = hive.Connection(host=host, port=port,username=username,password=password,auth=auth,database=dbname)
    cursor = conn.cursor()
    cursor.execute('select * from schema.table')
    fdata = open('a.dat', 'wb+')
    num = 0
    while True:
        num += 1
        data = cursor.fetchmany(size = 10)
        if len(data) == 0:
            break
        for rows in data:
            temp = []
            for d in rows:
                temp.append(str(d).encode('utf-8'))
            temp.append(b'\n')
            line = field_sep_token.join(temp)
            fdata.write(line)
    fdata.close()

if __name__ == '__main__':
    main()

如上所示,可以看到将表中的数据下载下来,然后存储到.dat文件当中,但是可能会出现hive对应表中的数据数据比较多,如果一次性读取到内存的话,可能会导致内存溢出的问题,因此可以每次读取指定数量的数据,如1000条数据,将这1000条数据写入到文件当中,然后再去读取数据,直至读取完数据为止,这里采用了pyhive中fetchmany()的方法,其中有一个size的参数,表示一次性读取指定量的数据到内存,处理完之后再读取下一部分的数据到内存中;这里需要注意的是,fetchmany的方法返回的是一个数组类型,数组中的每一行数据是一个元组,如果没有数据的话,返回的是一个空的数组,而不是None;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值