Spark Core RDD行動運算元

2022-03-28 02:38:04 字數 2952 閱讀 9704

通過func函式聚集rdd 中的所有元素,先聚合分區內資料,再聚合分區間資料。

scala> val rdd1 = sc.parallelize(1 to 100)

scala> rdd1.reduce(_ + _)

res0: int = 5050

scala> val rdd2 = sc.parallelize(array(("a", 1), ("b", 2), ("c", 3)))

scala> rdd2.reduce((x, y) => (x._1 + y._1, x._2 + y._2))

res2: (string, int) = (abc,6)

陣列的形式返回 rdd 中的所有元素.

所有的資料都會被拉到 driver 端,所以要慎用

返回 rdd 中元素的個數.

返回 rdd 中前 n 個元素組成的陣列.

take 的資料也會拉到 driver 端, 應該只對小資料集使用

返回 rdd 中的第乙個元素. 類似於take(1).

返回排序後的前 n 個元素,預設是公升序排列.

資料也會拉到 driver 端

scala> val rdd1 = sc.makerdd(array(100, 20, 130, 500, 60))

scala> rdd1.takeordered(2)

res6: array[int] = array(20, 60)

scala> rdd1.takeordered(2)(ordering.int.reverse)

res7: array[int] = array(500, 130)

def aggregate[u: classtag](zerovalue: u)(seqop: (u, t) => u, combop: (u, u) => u): u
aggregate函式將每個分割槽裡面的元素通過seqop和初始值進行聚合,然後用combine函式每個分割槽的結果初始值(zerovalue)進行combine操作

這個函式最終返回的型別不需要和rdd中元素型別一致

zerovalue分區內聚合和分區間聚合的時候各會使用一次

scala> val rdd1 = sc.makerdd(array(100, 30, 10, 30, 1, 50, 1, 60, 1), 2)

rdd1: org.apache.spark.rdd.rdd[int] = parallelcollectionrdd[8] at makerdd at :24

scala> rdd1.aggregate(0)(_ + _, _ + _)

res12: int = 283

scala> val rdd1 = sc.makerdd(array("a", "b", "c", "d"), 2)

rdd1: org.apache.spark.rdd.rdd[string] = parallelcollectionrdd[9] at makerdd at :24

scala> rdd1.aggregate("-")(_ + _, _ + _)

res13: string = --ab-cd

摺疊操作,aggregate的簡化操作,seqop和combop一樣的時候,可以使用fold

scala> val rdd1 = sc.makerdd(array(100, 30, 10, 30, 1, 50, 1, 60, 1), 2)

scala> rdd1.fold(0)(_ + _)

scala> val rdd1 = sc.makerdd(array("a", "b", "c", "d"), 2)

scala> rdd1.fold("-")(_ + _)

res17: string = --ab-cd

作用:將資料集的元素以textfile的形式儲存到hdfs檔案系統或者其他支援的檔案系統,對於每個元素,spark 將會呼叫tostring方法,將它裝換為檔案中的文字

作用:將資料集中的元素以 hadoop sequencefile 的格式儲存到指定的目錄下,可以使 hdfs 或者其他 hadoop 支援的檔案系統。

作用:用於將 rdd 中的元素序列化成物件,儲存到檔案中。

作用:針對(k,v)型別的 rdd,返回乙個(k,int)的map,表示每乙個key對應的元素個數。

應用: 可以用來檢視資料是否傾斜

scala> val rdd1 = sc.parallelize(array(("a", 10), ("a", 20), ("b", 100), ("c", 200)))

scala> rdd1.countbykey()

res19: scala.collection.map[string,long] = map(b -> 1, a -> 2, c -> 1)

作用:針對 rdd 中的每個元素都執行一次func

每個函式是在executor 上執行的,不是在 driver 端執行的.

行動,行動,再行動

生活中總有一種人,抱有這樣或那樣想法,整日做著白日夢,夢想成功有一日會像餡餅一樣砸到自己的頭上。非但如此,他們還會不時地制定各種各樣的目標?今天下定決心一定要努力去實現自己的目標,可是第二天早上起來,一切照舊。他們總是在幻想,卻從不見行動。這就是平凡的人 晚上想出千條路,早上起來走原路。因此,他們注...

行動的力量

做一件事情,只要開始行動,就算獲得了一半的成功。演講大師齊格勒提醒我們,世界上牽引力最大的火車頭停在鐵軌上,為了防滑,只需在它8個驅動輪前面塞一塊一英吋見方的木塊,這個龐然大物就無法動彈。然而,一旦這只巨型火車頭開始啟動,這小小的木塊就再也擋不住它了 當它的時速達到100英里時,一堵5英呎厚的鋼筋混...

2011強國行動

宗旨 挖掘可用時間,強化專業技能,定力,執行力,精力和意識,為個人發展新計畫奠定堅實基礎。目標 1.專業技能 2.定力 想靜則靜,想活躍則活躍,做事堅定不輕易轉移目標 3.精力 身體鍛鍊和精神力強化,讓自己有更旺盛精力進行個人發展 4.意識 案例分析。多思考,多總結,多分析和借鑑別人經驗 通過網路 ...