要完成用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里面的一些類去清理數據,對特征向量進行清洗和轉換;同時,用里面的機器學習算法去測試一下數據集。