【spark】RDD建立

首先咱們要創建 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

相關文章
相關標籤/搜索