通過SPARK將hadoop的文本數據導入hive的表


  要完成用SPARK將hadoop的文件數據轉換為hive的表。首先,要安裝好hadoop,hive,spark;其次,文本數據是結構化的文本,可以直接映射到表的如csv格式的。

  我們的文本數據集由五個字段組成的,用tab符號隔開,存放在hadoop的hdfs:///data/source/tmpdataset.txt目錄下。

  在hive新建一張要存放導入數據的表,hive用的版本是1.2.1版本的。sql建表語句如下:

CREATE TABLE tmp_table
(field1 VARCHAR(32),
field2 VARCHAR(32),
field3 VARCHAR(64),
field4 VARCHAR(32), 
field5 VARCHAR(32)) 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ','
STORED AS PARQUET;

啟動spark的spark-shell;spark用的是spark2.0的版本。

首先,獲取hdfs:///data/source/tmpdataset.txt的數據集

val TmpDataList = spark.sparkContext.textFile("hdfs:///data/source/tmpdataset.txt")

 

創建DataFrames所用到的映射schema

val schemaString = "field1,field2,field3,field4,field5"

import org.apache.spark.sql.types._

val fields = schemaString.split(",").map(fieldName => StructField(fieldName, StringType, nullable = true))

val schema = StructType(fields)

 

將TmpDataList的數據集映射成RDD的格式

val TmpDataListRDD = TmpDataList.map(_.split("\t")).map(p => Row(p(0),p(1),p(2),p(3),p(4)))

 

創建數據集的DataFrames格式

val TmpDataListDF = spark.createDataFrame(TmpDataListRDD, schema)

 

將數據集的DataFrames格式映射到臨時表

TmpDataListRDD.createOrReplaceTempView("TmpData")

 

用sql語句將臨時表的數據導入hive的tmp_table表中

sql("insert overwrite table tmp_table select * from TmpData")

 

這樣就將數據導入到hive中。為什么要用spark去將hadoop的數據轉換為hive的格式?當你所擁有的數據集非常大,而且又是結構化的時候。用hive直接導入是非常慢的,用spark導入非常快。

 

這里講了如何導入數據,以后可能會講到如何用spark的ml和mllib里面的一些類去清理數據,對特征向量進行清洗和轉換;同時,用里面的機器學習算法去測試一下數據集。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM