RDD常用的運算元操作

2021-08-16 04:35:15 字數 2655 閱讀 1871

啟動spark-shell 進行測試:

spark-shell

--master spark://node-1:7077

//通過並行化生成rdd

val rdd1 = sc.parallelize(list(5, 6, 4, 7, 3, 8, 2, 9, 1, 10))

//對rdd1裡的每乙個元素乘2然後排序

val rdd2 = rdd1.map(_ * 2).sortby(x => x, true)

//過濾出大於等於5的元素

val rdd3 = rdd2.filter(_ >= 5)

//將元素以陣列的方式在客戶端顯示

rdd3.collect

val rdd1 = sc.parallelize(array("a b c", "d e f", "h i j"))

//將rdd1裡面的每乙個元素先切分在壓平

val rdd2 = rdd1.flatmap(_.split(" "))

rdd2.collect

val rdd1 = sc.parallelize(list(5, 6, 4, 3))

val rdd2 = sc.parallelize(list(1, 2, 3, 4))

//求並集

val rdd3 = rdd1.union(rdd2)

//求交集

val rdd4 = rdd1.intersection(rdd2)

//去重

rdd3.distinct.collect

rdd4.collect

val rdd1 = sc.parallelize(list(("tom", 1), ("jerry", 3), ("kitty", 2)))

val rdd2 = sc.parallelize(list(("jerry", 2), ("tom", 1), ("shuke", 2)))

//求join

val rdd3 = rdd1.join(rdd2)

rdd3.collect

//求並集

val rdd4 = rdd1 union rdd2

rdd4.collect

//按key進行分組

val rdd5=rdd4.groupbykey

rdd5.collect

val rdd1 = sc.parallelize(list(("tom", 1), ("tom", 2), ("jerry", 3), ("kitty", 2)))

val rdd2 = sc.parallelize(list(("jerry", 2), ("tom", 1), ("jim", 2)))

//cogroup

val rdd3 = rdd1.cogroup(rdd2)

//注意cogroup與groupbykey的區別

rdd3.collect

val rdd1 = sc.parallelize(list(1, 2, 3, 4, 5))

//reduce聚合

val rdd2 = rdd1.reduce(_ + _)

rdd2.collect

val rdd1 = sc.parallelize(list(("tom", 1), ("jerry", 3), ("kitty", 2),  ("shuke", 1)))

val rdd2 = sc.parallelize(list(("jerry", 2), ("tom", 3), ("shuke", 2), ("kitty", 5)))

val rdd3 = rdd1.union(rdd2)

//按key進行聚合

val rdd4 = rdd3.reducebykey(_ + _)

rdd4.collect

//按value的降序排序

val rdd5 = rdd4.map(t => (t._2, t._1)).sortbykey(false).map(t => (t._2, t._1))

rdd5.collect

val rdd1 = sc.parallelize(1 to 10,3)

//利用repartition改變rdd1分割槽數

//減少分割槽

rdd1.repartition(2).partitions

.size

//增加分割槽

rdd1.repartition(4).partitions

.size

//利用coalesce改變rdd1分割槽數

//減少分割槽

rdd1.coalesce(2).partitions

.size

注意:repartition可以增加和減少rdd中的分割槽數,coalesce只能減少rdd分割槽數,增加rdd分割槽數不會生效。

RDD行動運算元

作用 通過func函式聚集rdd中的所有元素,先聚合分區內資料,再聚合分區間資料。需求 建立乙個rdd,將所有元素聚合得到結果。1 建立乙個rdd int scala val rdd1 sc.makerdd 1 to 10,2 rdd1 org.apache.spark.rdd.rdd int pa...

RDD轉換運算元和行動運算元的區別

textfile 既不是transformation 也不是 action 它是為生成rdd前做準備 運算元 指的就是rdd上的方法。spark中的運算元分為2類 1 轉換運算元 transformation 由rrd 呼叫方法 返回乙個新的rdd 一直存在drive中因為沒生成task 特點 生成...

Spark學習進度 RDD運算元

需求 資料格式如下 在 spark 中,其實最終 job3 從邏輯上的計算過程是 job3 job1.map filter,整個過程是共享記憶體的,而不需要將中間結果存放在可靠的分布式檔案系統中 線性回歸 val points sc.textfile map persist val w random...