寫隨筆大概也是做筆記記錄下自己思考的意思吧,之前有些事情覺得做隨筆還是比較有用的,mark一下一個有用的網址
關於rdd的操作,網上有很多很多的教程,當初全部順一遍,除了對rdd這個類型有了點概念,剩下具體的方法以及方法的寫法已經快忘記了,所以具體還是記一下對某些事情的思考吧。
關於將rdd保存為文件,我使用的是
import org.apache.spark.{SparkConf, SparkContext} object Wordcount { def main(args: Array[String]): Unit = { val conf=new SparkConf().setAppName("wordcount").setMaster("local") val sc=new SparkContext(conf) val rdd1 = sc.parallelize(List(("tom", 1), ("jerry", 3), ("kitty", 2))) val rdd2 = sc.parallelize(List(("jerry", 2), ("tom", 1), ("shuke", 2))) //求jion val rdd3 = rdd1.union(rdd2) //按key進行聚合 val rdd4 = rdd3.reduceByKey(_ + _) rdd4.collect().foreach({println}) //按value的降序排序 val rdd5 = rdd4.map(t => (t._2, t._1)).sortByKey(false).map(t => (t._2, t._1)) rdd5.collect().foreach({println}) rdd5.saveAsTextFile("aaaaa1") } }
以上代碼,rdd是我通過將兩個rdd合並后得到,查看的時候發現rdd5是有兩個分區的,輸出結果是:
而保存的文件aaaa1則是一個文件夾,所以如果已存在會報文件已存在的錯誤無法運行(源代碼里應該沒有做相關的判斷和處理),最終結果生成在文件夾中,如下:
具體的數據保存在后兩個文件夾中:
part-00000:
(jerry,5)
part-00001:
(tom,2) (shuke,2) (kitty,2)
這是按rdd5里面本身的分區數,各分區內容來生成的,而crc指的是循環冗余,.crc文件是指文件摘要,好像並沒有什么特殊的,就是進行crc校驗的文件。我本來以為crc和幾個分區文件的聯系有關系,后來想想spark處理大量數據的時候各分區數據的聯系也並不算緊密,基本不會去區分前后順序,並不需要保存彼此的聯系。
大概發現了兩件事情:
1、是小文件產生的大量冗余,有時候這些是沒必要的,給讀寫它帶來了一些麻煩,但是這個是有方法解決的,暫時還沒有涉獵。
2、分區間不平衡,雖然只是很少條數據,但是之前也有做過某些RDD練習也說明rdd里分區並不會實時幫你平衡各分區的數據數量,但是spark有提供相應的方法,其他的,比如hive可能就不一定了。