Spark的互動式指令碼是一種學習API的簡單途徑,也是分析資料集互動的有力工具。
Spark抽象的分布式叢集空間叫做Resilient Distributed Dataset (RDD)彈性資料集。
其中,RDD有兩種建立方式:
(1)、從Hadoop的檔案系統輸入(例如HDFS);
(2)、有其他已存在的RDD轉換得到新的RDD;
下面進行簡單的測試:
1. 進入SPARK_HOME/bin下運行命令:
$./spark-shell
2. 利用HDFS上的一個文字檔建立一個新RDD:
scala> var textFile = sc.textFile("hdfs://localhost:50040/input/WordCount/text1");
textFile: org.apache.spark.rdd.RDD[String] = MappedRDD[1] at textFile at <console>:12
3. RDD有兩種類型的操作 ,分別是A ction(返回values)和Transformations(返回一個新的RDD)
(1)Action相當於執行一個動作,會返回一個結果:
scala> textFile.count() // RDD中有多少行
輸出結果2:
14/11/11 22:59:07 INFO spark.SparkContext: Job finished: count at <console>:15, took 5.654325469 sres1: Long = 2
scala> textFile.first() // RDD第一行的內容
結果輸出:
14/11/11 23:01:25 INFO spark.SparkContext: Job finished: first at <console>:15, took 0.049004829 sres3: String = hello world
(2)Transformation相當於一個轉換,會將一個RDD轉換,並返回一個新的RDD:
scala> textFile.filter(line => line.contains("hello")).count() // 有多少行含有hello
結果輸出:
14/11/11 23:06:33 INFO spark.SparkContext: Job finished: count at <console>:15, took 0.867975549 sres4: Long = 2
4. spark shell的WordCount
scala> val file = sc.textFile("hdfs://localhost:50040/input")scala> val count = file.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey(_+_)scala> count.collect()
輸出結果:
14/11/11 23:11:46 INFO spark.SparkContext: Job finished: collect at <console>:17, took 1.624248037 sres5: Array[(String, Int)] = Array((hello,2), (world,1), (My,1), (is,1), (love,1), (I,1), (Urey,1), (hadoop,1), (name,1), (programming,1))
當然基於RDD還有很多複雜的操作,後面學習過程中遇到再總結出來。