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格式表也存在缺點,即文件不壓縮,佔用空間較大,應該還存在更理想實現方案,

有待驗證

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章