方式一、從內存中創建
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)
}
}