首先咱們要創建 sparkconf 配置文件,而後經過配置文件來創建sparkcontext。java
import org.apache.spark._ object MyRdd { def main(args:Array[String]): Unit ={ //初始化配置:設置主機名和程序主類的名字 val conf = new SparkConf().setMaster("local[*]").setAppName("MyRdd"); //經過conf來建立sparkcontext val sc = new SparkContext(conf); } }
而後咱們經過 sparkcontext 來建立RDDapache
建立RDD的幾種方式json
1.基於程序中的集合建立RDD-做用:主要用於測試 oop
經過 sc.parallelize(collection)方法來建立RDD
測試
/* * 從scala集合中建立RDD * 計算:1+2+3+...+100 */ val nums = List(1,2,3,4,5);//集合 val rdd = sc.parallelize(nums);//建立rdd val sum = rdd.reduce(_+_); println(sum);
2.基於本地文件建立RDD-做用:大數據量的測試 大數據
"file:///home/hadoop/spark-1.6.0-bin-hadoop2.6/examples/src/main/resources/people.json"
3.基於HDFS建立RDD-做用:生產環境最經常使用的RDD建立方式spa
"hdfs://112.74.21.122:9000/user/hive/warehouse/hive_test"
經過sc.textFile(file)方法來讀取文件scala
/* * 從本地文件系統建立RDD * 計算 people.json 文件中字符總長度 */ val rows = sc.textFile("file://")//文件地址或者HDFS文件路徑 val length = rows.map(row=>row.length()).reduce(_+_) println("total chars length:"+length)
能讀取文件,固然能保存文件,咱們能夠把經過 sc.saveAsTextFile("file://") 把 rdd 內容保存到文件中3d
例如,咱們保存把一個rdd保存到了/home/writeout.txt code
val rdd = sc.textFile("file:///home/word.txt"); rdd.saveAsTextFile("file:///home/writeout.txt");//把rdd寫入/home/writeout.txt
可是咱們打開/home文件夾,發現writeout並非txt文件而是一個文件夾,咱們打開文件夾,結構以下
咱們保存錯了嘛?沒有,這時正常的。part-00000表明的是分區,若是有多個分區,會有多個part-xxxxxx的文件。
若是咱們要再次讀取這個保存的文件並不須要一個一個分區讀取,直接讀取就能夠了,spark會自動加載全部分區數據。
val rdd = sc.textFile("file:///home/writeout/part-00000");//咱們並不用這樣一個一個讀取 val rdd = sc.textFile("file:///home/writeout.txt");//直接這樣讀取,就會自動把全部分區數據加載到rdd中
4.基於DB、NoSQL(例如HBase)、S三、基於數據流建立RDD