1. 程式人生 > >spark RDD運算元(一) parallelize,makeRDD,textFile

spark RDD運算元(一) parallelize,makeRDD,textFile

作者: 翟開順
首發:CSDN

parallelize

呼叫SparkContext 的 parallelize(),將一個存在的集合,變成一個RDD,這種方式試用於學習spark和做一些spark的測試
scala版本
def parallelize[T](seq: Seq[T], numSlices: Int = defaultParallelism)(implicit arg0: ClassTag[T]): RDD[T]
- 第一個引數一是一個 Seq集合
- 第二個引數是分割槽數
- 返回的是RDD[T]

scala> sc.parallelize(List("shenzhen"
, "is a beautiful city")) res1: org.apache.spark.rdd.RDD[String] = ParallelCollectionRDD[1] at parallelize at <console>:22

java版本
def parallelize[T](list : java.util.List[T], numSlices : scala.Int) : org.apache.spark.api.java.JavaRDD[T] = { /* compiled code */ }
- 第一個引數是一個List集合
- 第二個引數是一個分割槽,可以預設
- 返回的是一個JavaRDD[T]
java版本只能接收List的集合

JavaRDD<String> javaStringRDD = sc.parallelize(Arrays.asList("shenzhen", "is a beautiful city"));

makeRDD

只有scala版本的才有makeRDD
def makeRDD[T](seq : scala.Seq[T], numSlices : scala.Int = { /* compiled code */ })
跟parallelize類似

sc.makeRDD(List("shenzhen", "is a beautiful city"))

textFile

呼叫SparkContext.textFile()方法,從外部儲存中讀取資料來建立 RDD
例如在我本地F:\dataexample\wordcount\input下有個sample.txt檔案,檔案隨便寫了點內容,我需要將裡面的內容讀取出來建立RDD
scala版本

var lines = sc.textFile("F:\\dataexample\\wordcount\\input") 

java版本

 JavaRDD<String> lines = sc.textFile("F:\\dataexample\\wordcount\\input");

注: textFile支援分割槽,支援模式匹配,例如把F:\dataexample\wordcount\目錄下inp開頭的給轉換成RDD

var lines = sc.textFile("F:\\dataexample\\wordcount\\inp*")

多個路徑可以使用逗號分隔,例如

var lines = sc.textFile("dir1,dir2",3)