RDD基礎知識
阿新 • • 發佈:2019-01-08
RDD(彈性分散式資料集)作為spark的核心概念,RDD其實就是一個不可變的分散式的元素集合
什麼是彈性: 在任何實收都能進行重新計算,當儲存RDD資料的一臺機器掛了,spark還可以使用這種特性來重新計算出丟掉的分割槽,對使用者也完全透明。
每個RDD都被分為多個分割槽,這些分割槽執行在叢集中的不同節點
建立RDD的方式有多種,一是主要讀取一個外部的資料集,二是在驅動器程式中的物件集合。
創建出RDD之後,支援兩種型別的操作: transformation和action操作。轉化操作由一個RDD生產一個新的RDD,但只會惰性計算這些RDD,action操作才是真正計算最終結果的。
spark的RDD會在每次對他們進行action操作時重新計算,如果想在多個action操作中重用同一個RDD,可以使用cache()或是RDD.persist()來將這個RDD快取起來。我們也可以將資料快取到不同的地方,比如,磁碟或是記憶體。如果所有操作都結束,則可以呼叫stop()操作結束。
eg 舉例如下:
1 >>> val rdd = sc.parallelize(Seq(("hadoop",3), ("spark",2), ("hive",1), ("hbase",3), ("java",2))) 2 >>> val resRdd= rdd.filter(_._2 == 3) 3 >>> resRdd.persist() 4 >>> resRdd.count() 5 >>> resRdd.first()
大概的spark程式工作方式:
- 從外部資料集或驅動程式中創建出RDD.
- 使用filter(),flatMap()等transformation操作對RDD進行轉化,定義新的RDD.
- 將重用的中間結果RDD進行cache()或是persist()操作(cache()和使用預設級別的persist()操作是相同意思的)。
- 使用action操作來觸發一次平行計算。
http://spark.apachecn.org/docs/cn/2.2.0/sql-programming-guide.html
spark中文官網(學習spark最好的方式就是讀官方文件)