更新時間:2020年12月07日14時53分 來源:傳智教育 瀏覽次數(shù):
Spark可以從Hadoop支持的任何存儲源中加載數(shù)據(jù)去創(chuàng)建RDD,包括本地文件系統(tǒng)和HDFS等文件系統(tǒng)。
接下來,我們通過Spark中的SparkContext對象調(diào)用textFile()方法加載數(shù)據(jù)創(chuàng)建RDD。這里以Linux本地系統(tǒng)和HDFS分布式文件系統(tǒng)為例,講解如何創(chuàng)建RDD。
1. 從Linux本地文件系統(tǒng)加載數(shù)據(jù)創(chuàng)建RDD
在Linux本地文件系統(tǒng)中有一個名為test.txt的文件,具體內(nèi)容如文件1所示。
文件1 test.txt
1 hadoop spark 2 itcast heima 3 scala spark 4 spark itcast 5 itcast hadoop
在Linux本地系統(tǒng)讀取test.txt文件數(shù)據(jù)創(chuàng)建RDD,具體代碼如下:
scala> val test=sc.textFile("file:///export/data/test.txt") test: org.apache.spark.rdd.RDD[String]=file:///export/data/test.txt MapPartitionsRDD[1] at textFile at:24
上述的代碼中,文件路徑中的“file://”表示從本地Linux文件系統(tǒng)中讀取文件。“test:org.apache.spark.rdd.RDD[String]...”是命令執(zhí)行后返回的信息,而test則是一個創(chuàng)建好的RDD。當(dāng)執(zhí)行textFile()方法后,Spark會從Linux本地文件test.txt中加載數(shù)據(jù)到內(nèi)存中,在內(nèi)存中生成了一個RDD對象(即test),并且這個RDD里面包含若干個String類型的元素,也就是說,從test.txt文件中讀取出來的每一行文本內(nèi)容,都是RDD中的一個元素。
2. 從HDFS中加載數(shù)據(jù)創(chuàng)建RDD
假設(shè),在HDFS上的“/data”目錄下有一個名為test.txt的文件,該文件內(nèi)容與文件3-1相同。接下來,我們通過加載HDFS中的數(shù)據(jù)創(chuàng)建RDD,具體代碼如下:
scala> val testRDD=sc.textFile("/data/test.txt") testRDD:org.apache.spark.rdd.RDD[String]=/data/test.txt MapPartitionsRDD[1] at textFile at:24
執(zhí)行上述代碼后,從返回結(jié)果testRDD的屬性中看出RDD創(chuàng)建完成。在上述代碼中,我們通過textFile(“/data/test.txt”)方法來讀取HDFS上的文件,其中方法testFile()中的參數(shù)為“/data/test.txt”文件路徑,傳入的參數(shù)也可以為“hdfs://localhost:9000/data/test.txt”和“/test.txt”路徑,最終所達(dá)效果是一致的。