将合同解析的数据通过Python回传hive的一种方法

1,110 阅读1分钟

一、事件描述:将合同内容进行解析,并将解析结果回传hive可视化。该事件涉及以下几个步骤,文章重点描述第三步内容。

  1. 将合同文件入hbase;
  2. 读取合同文件并解析;
  3. 将解析结果csv文件回传hive;
  4. 将结果数据可视化呈现。

image.png 二、操作过程

  1. 准备工作 (1)准备csv文件,名称为test_wf_20210930,包含两个字段。为验证过程中减少等待时间和操作复杂度,提前准备了简化数据文件来模拟解析结果。

image.png

(2)创建hive目标表test_wf_20210930

create table XXX.test_wf_20210930(
name string,
tel string)
ROW FORMAT DELIMITED  
FIELDS TERMINATED BY ',';
  1. 认证,需有hdfs读写权限,此处使用hive用户。
kinit -kt hive.service.keytab hive/主机名@PANEL.COM
  1. 连接hbase
from hdfs.ext.kerberos import KerberosClient
try:
    keytab_file = './hive.service.keytab'
    user = 'hive'
    host = "IP"
    hdfs_port = "50070"
    hdfs_url = 'http://' + host + ':' + hdfs_port
    client = KerberosClient(hdfs_url)
    data = client.list('/')
    print(data)
except Exception as e:
    raise e
  1. 将本地文件upload到hdfs
client.upload("/","/home/datascience/data/test_wf_20210930.csv")

5.将hdfs文件load到hive

from pyhive.hive import connect
import os
import pandas as pd
keytab_file='hive.service.keytab'
user='hive'
host='IP'
port=10000
active_str='kinit -kt {0} {1}'.format(keytab_file,user)
os.system(active_str)
try:
    con=connect(host=host,port=port,database='XXX',auth='KERBEROS',kerberos_service_name="hive")
    cursor=con.cursor()
    dim_sql = "load data inpath '/test_wf_20210930.csv' into table XXX.test_wf_20210929"
    dim_sql_select = "select * from XXX.test_wf_20210929"
    cursor.execute(dim_sql)
    cursor.execute(dim_sql_select)
    curinfo = cursor.fetchall()
    print(curinfo)
finally:
    cursor.close()
    con.close()
	
  1. 查询hive检查数据是否准确
select * from XXX.test_wf_20210930;

image.png 三、注意事项&问题解决

  1. client.write和client.upload
client.write('/test_wf_20210930.csv','123.csv'):是将'123.csv'这段数据写入hdfs下csv文件内;
client.upload("/","/home/datascience/data/test_wf_20210930.csv"):是将test_wf_20210930.csv文件上传到hdfs根目录下;
  1. 写入hive表的数据均存储于一列,其他列为'Null' image.png
ROW FORMAT DELIMITED  
FIELDS TERMINATED BY '\t';
--建表时将列以','作为分隔符可以解决该问题。