1. 程式人生 > >spark定制之五:使用說明

spark定制之五:使用說明

建表 pan schemardd 特性 -s map data div popu

背景

spark-shell是一個scala編程解釋運行環境,能夠通過編程的方式處理邏輯復雜的計算,但對於簡單的類似sql的數據處理,比方分組求和,sql為”select g,count(1) from sometable group by g”,須要寫的程序是:

val hive = neworg.apache.spark.sql.hive.HiveContext(sc)

import hive._

val rdd = hql(“selectg,count(1) from sometable group by g”)

rdd.collect

看起來繁瑣。對於僅僅註重業務數據的人來說,附加了過多的spark工具的內容。

讓提交sql命令easy

用spark-shell的-i參數設定啟動腳本,能夠省去hive變量定義和import兩句。

用面向對象編程把後兩句能夠合並變為hql(“select g,count(1) from sometable group by g”).collect。

用scala隱形轉換再簡單為“selectg,count(1) from sometable group by g”.hqlgo。

用scala省略括號特性,能夠寫成“selectg,count(1) from sometable group by g” hqlgo。

簡化後的語句:“select g,count(1) from sometable group by g” hqlgo

假設分多行寫能夠寫成:

“””

selectg,count(1)

from sometable

group by g

“”” hqlgo

讓結果保存easy

查詢結果保存須要寫的程序:

val rdd = hql(“selectg,count(1) from sometable group by g”)

rdd.saveAsTextFile(“hdfs:/somedir”)

同上面的sql提交類似,簡化後的語句:“select g,count(1) from sometable group by g”saveto “hdfs:/somedir”

多行形式:

“””

selectg,count(1)

from sometable

group by g”””saveto “hdfs:/somedir”

註:

1)多行寫時saveto與前面不能再分行。後面的路徑也不能再分行

2)假設保存到本地文件,文件應包括擴展名後綴

3)原spark實現的輸出格式有問題,hive不能正確解析數據結構,新改的定制版已解決

讓讀取文件創建內存表easy

對hdfs中的數據進行sql,假設想在hive中創建表則用”create externaltable ...” hqlgo就可以;假設僅僅創建內存表做數據處理,須要寫的程序:

val rdd =sc.textFile(“hdfs:/somedir”)

case class SomeClass(name:String,age:Int,weight:Double)

val schemardd = rdd.map(_.split("\t")).map(t=>SomeClass (t(0),t(1),t(2)))

hive.registerRDDAsTable(schemardd,"sometable")

hql(“selectg,count(1) from sometable group by g”).collect

簡化後的語句:

"create table sometable (name string,age int,weightdouble)"from "hdfs:/somedir"

“selectg,count(1) from sometable group by g” hqlgo

多行形式:

“””

create tablesometable (

name string,

age int,

weight double)

“”” from"hdfs:/somedir"

“selectg,count(1) from sometable group by g” hqlgo

註:

1)”create table ”需嚴格按此寫,create後、table後必須有一個空格

2)輸出路徑為了避免覆蓋大的文件夾,全路徑字符長度必須大於等於24個字符

結果檢查

計算結果可能是數據表、也可能輸出到文件。

數據表檢查:”sometable” isok

文件檢查:”somefile.txt” isok

“hdfs:/somedir” isok

推斷的標準是文件不為空,長度大小大於0;路徑不為空。以下存在長度大於的文件;數據表記錄條數大於0。

註:

1)文件應包括擴展名後綴,在輸入的字符串中假設包括“.”、“/”則覺得是文件或文件夾,不包括覺得是數據表

2)假設想把查詢結果保存到內存用val data = "select * from testperson" hqlresult,查看內存中查詢的結果用do show data

定制spark的啟動

/sysdir/spark-1.0.0/bin/myspark

輸入help能夠得到幫助。

Spark定制的啟動shell腳本:http://blog.csdn.net/hyalone2010/article/details/37566699

spark定制的start.scala:http://blog.csdn.net/hyalone2010/article/details/37567203



spark定制之五:使用說明