Spark學習01——創建RDD的所有方法

方式一、從內存中創建

1.makeRDD

  val rdd = sc.parallelize(List("zhangsan", "lisi", "wangwu"))

2.parallelize

 val rdd2 = sc.makeRDD(List("zhangsan", "lisi", "wangwu"))

區別:makeRDD函數有兩種實現,第一種實現其實完全和parallelize一致;而第二種實現可以爲數據提供位置信息

方式二、從文件系統創建

1.textFile
支持本地文件系統,HDFS, S3等(file:// hdfs:// s3n://);
textFile支持在目錄,壓縮文件和通配符上運行。例如,你可以使用textFile("/my/directory"),textFile("/my/directory/.txt")和textFile("/my/directory/.gz")。
該textFile方法還採用可選的第二個參數來控制文件的分區數。默認情況下,Spark爲文件的每個塊創建一個分區(HDFS中默認爲128MB),但您也可以通過傳遞更大的值來請求更多的分區。請注意,您不能擁有比塊少的分區。

val rdd3 = sc.textFile("file:///D:/github/SparkLearnExample/examples/src/main/resources/people.txt")

2.wholeTextFiles
與textFile區別爲:返回文件名和內容 鍵值對RDD,其它一樣

val rdd4 = sc.wholeTextFiles("file:///D:/github/SparkLearnExample/examples/src/main/resources")

3.sequenceFile
讀取sequenceFile文件,其中K和V是文件中鍵和值的類型。這些應該是Hadoop的Writable接口的子類

val rdd5 = sc.sequenceFile("hdfs://xxx", classOf[Text], classOf[Text])

4.newAPIHadoopRDD
方法採用任意JobConf輸入格式類,鍵類和值類。設置這些與使用輸入源的Hadoop作業的方式相同.讀hbase如下

    val hconf: Configuration = HBaseConfiguration.create
    hconf.set("hbase.zookeeper.quorum", "xxx:2181,xxx:2181,xxx:2181")
    hconf.set(TableInputFormat.INPUT_TABLE, "xxx")
    hconf.set(TableInputFormat.SCAN_COLUMNS, "fields:phone_no fields:contacts_list")
    /*        hconf.set(TableInputFormat.SCAN_ROW_START,"0");
            hconf.set(TableInputFormat.SCAN_ROW_STOP,"10000");*/
    val pairRdd = sc.newAPIHadoopRDD(hconf, classOf[TableInputFormat], classOf[ImmutableBytesWritable],classOf[Result])
    pairRdd.foreach(println)

完整代碼

object CreateRDDFun {
  def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf().setAppName("CreateRDDFun examples").setMaster("local[*]")
    val sc = new SparkContext(sparkConf)

    /**
      * 1.從內存中創建:makeRDD和parallelize
      * 區別:makeRDD函數有兩種實現,第一種實現其實完全和parallelize一致;而第二種實現可以爲數據提供位置信息
      */
    create01(sc)
    create02(sc)

    /**
      * 2.從文件系統創建:textFile、wholeTextFiles、sequenceFile、newAPIHadoopRDD
      */
    create03(sc)
    create04(sc)
    create05(sc)
    create06(sc)

    sc.stop()
  }

  private def create01(sc: SparkContext): Unit = {
    val rdd = sc.parallelize(List("zhangsan", "lisi", "wangwu"))
    rdd.foreach(println)
  }

  private def create02(sc: SparkContext): Unit = {
    val rdd2 = sc.makeRDD(List("zhangsan", "lisi", "wangwu"))
    rdd2.foreach(println)
  }

  private def create03(sc: SparkContext): Unit = {
    // file://  hdfs:// s3n://
    val rdd3 = sc.textFile("file:///D:/github/SparkLearnExample/examples/src/main/resources/people.txt")
    rdd3.foreach(println)
  }

  private def create04(sc: SparkContext): Unit = {
    //返回文件名和內容 鍵值對RDD
    val rdd4 = sc.wholeTextFiles("file:///D:/github/SparkLearnExample/examples/src/main/resources")
    rdd4.foreach(println)
  }

  private def create05(sc: SparkContext): Unit = {
    //其中K和V是文件中鍵和值的類型
    val rdd5 = sc.sequenceFile("hdfs://xxx", classOf[Text], classOf[Text])
    rdd5.foreach(println)
  }

  private def create06(sc: SparkContext): Unit = {
    //方法採用任意JobConf輸入格式類,鍵類和值類。設置這些與使用輸入源的Hadoop作業的方式相同.
    //讀hbase
    val hconf: Configuration = HBaseConfiguration.create
    hconf.set("hbase.zookeeper.quorum", "xxx:2181,xxx:2181,xxx:2181")
    hconf.set(TableInputFormat.INPUT_TABLE, "xxx")
    hconf.set(TableInputFormat.SCAN_COLUMNS, "fields:phone_no fields:contacts_list")
    /*        hconf.set(TableInputFormat.SCAN_ROW_START,"0");
            hconf.set(TableInputFormat.SCAN_ROW_STOP,"10000");*/
    val pairRdd = sc.newAPIHadoopRDD(hconf, classOf[TableInputFormat], classOf[ImmutableBytesWritable],classOf[Result])
    pairRdd.foreach(println)
  }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章