標籤:style blog http io ar java for strong 檔案
//載入資料1~10
val num=sc.parallelize(1 to 10)
//每個資料項目乘以2,注意 _*2記為一個函數(fun)
val doublenum = num.map(_*2)
//記憶體快取資料
doublenum.cache()
//過濾資料,每個資料項目 % 3 為0的資料為結果集;
val threenum = doublenum.filter(_ % 3 == 0)
//釋放緩衝
threenum.unpersist()
//出發action操作根據前面的步驟構建DAG並執行,以資料的形式返回結果集;
threenum.collect
//返回結果集中的第一個元素
threenum.first
//返回結果集中的前三個元素
threenum.take(3)
//對資料集中的元素個數統計
threenum.count
//查看以上步驟經過的RDD轉換過程
threenum.toDebugString
結果:
// 載入資料
val kv1=sc.parallelize(List(("A",1),("B",2),("C",3),("A",4),("B",5)))
//根據資料集中的每個元素的K值對資料排序
kv1.sortByKey().collect
kv1.groupByKey().collect //根據資料集中的每個元素的K值對資料分組
kv1.reduceByKey(_+_).collect
注意:sortByKey 、groupByKey 、reduceByKey之間的結果集的區別;
val kv2=sc.parallelize(List(("A",4),("A",4),("C",3),("A",4),("B",5)))
kv2.distinct.collect // distinct操作去重
kv1.union(kv2).collect //kv1與kv2聯合
kv1.join(kv2).collect //kv1與kv2兩個資料連線,相當於表的關聯
val kv3=sc.parallelize(List(List(1,2),List(3,4)))
kv3.flatMap(x=>x.map(_+1)).collect //注意這裡返回的資料集已經不是K-V類型了
先將clk.tsv和reg.tsv檔案上傳到hdfs,檔案格式如下;
// 定義一個對日期格式化的常量
val format = new java.text.SimpleDateFormat("yyyy-MM-dd")
// scala文法,定義Register類(根據reg.tsv資料格式)
case class Register (d: java.util.Date, uuid: String, cust_id: String, lat: Float,lng: Float)
// scala文法,定義Click類(根據clk.tsv資料格式)
case class Click (d: java.util.Date, uuid: String, landing_page: Int)
// 載入hdfs上的檔案reg.tsv並將每行資料轉換為Register對象;
val reg = sc.textFile("hdfs://chenx:9000/week2/join/reg.tsv").map(_.split("\t")).map(r => (r(1), Register(format.parse(r(0)), r(1), r(2), r(3).toFloat, r(4).toFloat)))
// 載入hdfs上的檔案clk.tsv並將每行資料轉換為Click對象;
val clk = sc.textFile("hdfs://chenx:9000/week2/join/clk.tsv").map(_.split("\t")).map(c => (c(1), Click(format.parse(c(0)), c(1), c(2).trim.toInt)))
reg.join(clk).collect
Spark系列(二) Spark Shell各種操作及詳細說明