本地spark下保存rdd為文件


  寫隨筆大概也是做筆記記錄下自己思考的意思吧,之前有些事情覺得做隨筆還是比較有用的,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可能就不一定了。

 


免責聲明!

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



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