スパークコア
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 ) ] キーによると、CreateCombinerとmergeValueは同じキーの値を集計するために使用され、各パーティションの最終結果はmergeCombinersを介して集計されます。
14 、def AggregateByKey [ U :ClassTag](zeroValue:U 、partitioner:Partitioner)(seqOp:(U 、V )=> U 、
combOp:(U 、U )=> U ):RDD [(K 、U )] を介してseqOpの機能最終的な値を返す関数に各パーティションのデータ及び初期値をもたらすために、comOpは、最終的な値を返します各パーティションマージ操作は、キーに従って実行されます。