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
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。