Sparkコース02:RDDコンセプト、RDD変換、アプリケーション送信

 

スパークコア

Sparkコアの最も重要な部分:RDD(Sparkコンピューティングの基礎である復元力のある分散データセットは、ユーザーの基になるデータの複雑な抽象化と処理を隠し、ユーザーに便利なデータ変換と評価方法のセットを提供します)

val prdd = sc.parallelize(1 to 10)

prdd.collect

val lrdd = sc.parallelize(List("a","b","c"))

lrdd.collect

val mrdd = sc.makeRDD(0 to 10)

mrdd.collect

val aa = sc.makeRDD(List((1,List("a","b","c")),(2,List("d","e","f"))))

aa.

aa.partitions.size

aa.preferredLocations(aa.partitions(1))

aa.preferredLocations(aa.partitions(0))

 

 1. RDDは、Spark全体のコンピューティングの基礎です。これは分散データの抽象化であり、基盤となる複雑なコンピューティングおよびマッピング環境からユーザーを保護します。

        1. RDDは不変です。RDDで変換操作を実行する必要がある場合は、新しいRDDが生成されます。

        2. RDDはパーティション化され、RDD内の特定のデータは複数のマシンのエグゼキューターに分散されます。オンヒープメモリとオフヒープメモリ+ディスク。

        3.RDDは柔軟性があります。

             1.ストレージ:Sparkは、ユーザーの構成または現在のSparkアプリケーションの操作に応じて、RDDデータをメモリまたはディスクに自動的にキャッシュします。これは、ユーザーには見えないカプセル化された関数です。

             2.フォールトトレランス:RDDデータが削除または失われた場合、血統またはチェックポイントメカニズムを介してデータを回復できます。このユーザーは透過的です。

             3.計算:計算は階層的であり、アプリケーション-> JOb->ステージ->タスクセット-タスクがあります。各レイヤーには、対応する計算保証と繰り返しメカニズムがあります。予期しない要因によって計算が終了しないようにしてください。

             4.断片化:ビジネスニーズまたは一部のオペレーターに応じて、RDDのデータ分散を再調整できます。

 

  2. Spark Coreが行うことは、実際にRDDを操作することです

        RDDの作成-「RDD変換-」RDDキャッシュ-「RDDアクション-」RDD出力。

 

 3. RDDを作成するにはどうすればよいですか?

        RDDを作成する方法は3つあります。

        1.Scalaコレクションから作成できます

            1. sc.parallelize(seq)は、seqデータを並列化し、ノードにシャーディングします

            2. sc.makeRDD(seq)seqデータを並列化し、ノードにシャーディングします。その実装は並列化されます。

            3. sc.makeRDD(seq [(T、seq)]このメソッドは、RDDの保存場所を指定できます。

        2. sc.textFile( "path")などの外部ストレージから作成します

        3.別のRDDから変換します。

 

RDD変換

val sourceRdd = sc.makeRdd(1 to 10)

sourceRdd.

sourceRdd.map(_ * 2)

res0.collect

val filter = sc.makeRDD(Array("aa","bb","cc","dd"))

filter.

filter.filter(_.)

filter.filter(_.startsWith("aa")).collect

val ff = sc.textFile("abc.text")

ff.collect(出错,因为RDD是懒执行的)

// **********************変換操作*********************

。1、DEFマップ[ U- :ClassTag](F:T => U- ):RDD [ U- ]   各要素RDDし、新しいRDDを返す関数

2 DEFのフィルタ(F:T =>ブール):RDD [ T ]        設け製造によるブール式の条件と一致する結果が返され真の新しいRDDを

。3 DEF flatMap [ U- :ClassTag](F:T => TraversableOnce [ U -]):RDD [ U- ]   それぞれがコレクション用に生成されるRDDを実行する関数、およびコレクション要素はセットにフラット化されます。

。4 DEF mapPartitions [ U- :ClassTag](F:イテレータ[ T ] =>イテレータ[ U -]、preservesPartitioning:=ブール値からfalse):RDD [ U- ]    各パーティションRDDする関数、各パーティションは一度実行すると、関数が受け入れることができるようにする必要がありイテレータの種類をしてから返すイテレータを

。5 DEF mapPartitionsWithIndex [ U- :ClassTag](F:(Int、Iterator [ T ])=> Iterator [ U -]、preservesPartitioning:= Boolean to false):RDD [ U- 関数RDDパーティションが一度実行されると、各パーティションは、それぞれ、関数が受け入れることができる パーティションのインデックス値 イテレータのタイプのすべてのデータを表すパーティションは、それが返す必要イテレータタイプ。

。6 DEF(:ブール値、小数:ダブル、シード:. = Utilsの長期にwithReplacementサンプルランダム.nextLong):RDD [ T ]RDDシフト種子は種子が実質的に戻ってきている画分率データサンプルをRDD にwithReplacementを就業かどうかを示します交換サンプリング。

。7 DEFユニオン(OTHER:RDD [ T ]):2つのRDD要素のRDD [ T が結合され、新しいRDDが返されます。

8 DEF交差(OTHER:RDD [ T ]):RDD [ T 2つのRDDdo交差、新しいRDDを返します

。9 DEF DISTINCT():RDD [ T 重複排除後の現在のRDDは、新しいRDDを返します

10 DEF partitionBy(partitioner:Partitioner):RDD [(K V )]  再パーティションはRDDパーティションに従って設定され、新しいRDDを返します

。11 DEF reduceByKey(FUNC:(V V )=> V RDD [(:)K V )]   キーを同じ値にキーと値の組FUNC算出戻る新しいRDD

12はDEF GroupByKey():RDD [(K Iterable [ V ])]   K Iterable [ V ])タイプのRDDを出力する同じキー値を集約します

13はDEF CombineByKey [ C ](createCombiner:V => C 、mergeValue:(C V )=> C 、mergeCombiners:(C C )=> C 、numPartitions:Int):RDD [(K C ) ]   キーよるとCreateCombinermergeValue同じキーの集計するために使用され、各パーティションの最終結果はmergeCombinersを介して集計されます

14 def AggregateByKey [ U :ClassTag](zeroValue:U 、partitioner:Partitioner)(seqOp:(U V )=> U

combOp:(U U )=> U ):RDD [(K U )]   を介してseqOpの機能最終的な値を返す関数に各パーティションのデータ及び初期値をもたらすために、comOpは、最終的な値を返します各パーティションマージ操作はキーに従って実行されます

おすすめ

転載: blog.csdn.net/qq_40473204/article/details/115030355