Spark RDD 多文件輸入


1.將多個文本文件讀入一個RDD中

  

       SparkConf conf=new SparkConf()
               .setMaster("local")
               .setAppName("save");
       JavaSparkContext sc=new JavaSparkContext(conf);
       
       JavaRDD<String>  lines=sc.textFile("student*");
       lines.foreach(new VoidFunction<String>(){

        @Override
        public void call(String arg0) throws Exception {
            // TODO Auto-generated method stub
            System.out.println(args);
            
        }
           
       });
       
    }

 

   textFile的參數可以支持通配符哦!!!很強大吧。事實上,這個東西確實很強大:

public RDD<java.lang.String> textFile(java.lang.String path,
                             int minPartitions)
Read a text file from HDFS, a local file system (available on all nodes), or any Hadoop-supported file system URI, and return it as an RDD of Strings.

 

他可以從hdfs中讀取數據,可以從本地文件系統讀取數據(之不多此時要求所有節點都要有這個文件),或者任何hadoop支持的文件系統。

 

2.將一個RDD保存到文件中。

 

   SparkConf conf=new SparkConf()
               .setMaster("local")
               .setAppName("save");
       JavaSparkContext sc=new JavaSparkContext(conf);
       
       JavaRDD<String>  lines=sc.textFile("student*");

//保存到hdfs lines.saveAsTextFile(
"hdfs://spark2:9000/francis/spark-core/studentsRDD.txt");

 

ok,讓我們查看一下hdfs上的文件吧:

 

hadoop fs -ls -h /francis/spark-core/studentsRDD.txt/

 

內容如下:

Found 4 items
-rw-r--r--   3 francis supergroup          0 2016-03-10 18:58 /francis/spark-core/studentsRDD.txt/_SUCCESS
-rw-r--r--   3 francis supergroup         38 2016-03-10 18:58 /francis/spark-core/studentsRDD.txt/part-00000
-rw-r--r--   3 francis supergroup         38 2016-03-10 18:58 /francis/spark-core/studentsRDD.txt/part-00001
-rw-r--r--   3 francis supergroup         38 2016-03-10 18:58 /francis/spark-core/studentsRDD.txt/part-00002

可以發現,每一個partition保存到一個文件中去了。

 

注意:在windows eclipse中調用saveAsTextFile時,如果將數據保存到window本地文件,會出現錯誤!!!!!

想要測試這種情況,還是去linux吧。

 

調用saveAsTextFile將數據保存到外部文件系統中了,那么如何在將他們到RDD中呢?只需要調用textFile並傳入當時保存的那個文件名就ok了。

 

3.將RDD保存到一個文件中

  上面看到了,每一個partition會被保存到要給單獨的文件中去。如何讓所有partition都保存到一個文件中呢?可以考慮如下兩種思路:

  第一種方法,對rdd調用collect(),此時返回的是要給array,然后將array保存到文件中。

  第二張方法,並不推薦,他可能會極大的降低性能:先調用coalesce(1),然后再saveAsTextFile。

是否真的需要保存到一個文件中?這個需要仔細商榷,如果數據量比較大,保存到一個文件的性能會大大降低。

 

 

作者:FrancisWang

郵箱:franciswbs@163.com
出處:http://www.cnblogs.com/francisYoung/
本文地址:http://www.cnblogs.com/francisYoung/p/5263179.html
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM