spark高速写入hive数据 python源码

作为困扰我一周的一个问题,经过各种尝试,最终确定为读取文件并写入的方式颇为高效,在此记录。

# -*- coding: utf-8 -*-
import os
from pyspark import SparkContext, HiveContext, Row, StorageLevel
from pyspark.mllib.stat import Statistics
import tempRain
#加这一部分是为了解决转码问题,就不需要手动encode、decode
reload(sys)
sys.setdefaultencoding('utf-8')
output_tmp_dir="hdfs://hdfs地址"

def loadinto(exampleList,flag):
    line1 = sc.parallelize(exampleList)
    line1.repartition(1).textsaveAsTextFile(output_tmp_dir+flag)
    sqlContext.sql("load data inpath '"+output_tmp_dir+flag+"'  into table "+currentSchema+".table1") 
#调用example:

dayList=[]
insert="案例1\001案例2\001"
dayList.append(insert)
flag="123"
loadinto(dayList,flag)

 

 

 

思路是先通过RDD的textsaveAsTextFile保存为hdfs文件,再通过hive的load语句加载进入目标table。

目标表建表语句,要保证是表存储格式是textfile格式

create table table1
(  
  a string,
  b string
)
row format delimited  
fields terminated by '\001'  

stored as textfile

\001是数据间隔符

目前只找到此种文件导入方式,textfile格式表也存在缺点,即文件不压缩,占用空间较大,应该还存在更理想实现方案,

有待验证

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值