Spark演算子の分類
一般的な観点から、Spark演算子は次の2つのカテゴリにほぼ分割できます。
1)変換変換/変換演算子:この変換はジョブの提出をトリガーせず、ジョブの中間プロセス処理を完了します。
変換操作は計算が遅れているため、1つのRDD変換から別のRDDを生成するための変換操作はすぐに実行されません。操作がトリガーされる前に、アクション操作が利用可能になるまで待つ必要があります。
2)アクションアクションオペレーター:このタイプのオペレーターは、SparkContextをトリガーしてジョブジョブを送信します。
アクションオペレーターは、Spark Submission Job(Job)をトリガーし、データをSparkシステムに出力します。
小さな観点から、Spark演算子は次の3つのカテゴリにほぼ分割できます。
1)値データ型の変換演算子。この変換は、ジョブの提出を引き起こすものではありません。処理されたデータ項目は、Valueタイプのデータです。
2)キー価値データ型のトランスフロメーション演算子。この変換は、ジョブの提出を引き起こすものではありません。処理用のデータ項目は、キー価値のデータペアです。
3)アクションオペレーター、このタイプのオペレーターは、SparkContextをトリガーしてジョブジョブを送信します。
導入
結局のところ、SparkのソースコードはScalaで書かれているのは、通常、SparkプログラムをScalaで作成する方が便利です。ただし、現在、多くのJava開発者がいます。特に、データのドッキングやオンラインサービスの場合。現時点では、JavaでSparkを使用する方法を習得する必要があります。
1。マップ
データの処理と変換の場合、マップを頻繁に使用することはできません
MAPを使用する前に、最初に変換された関数形式を次のように定義する必要があります。
function <string、labeledpoint> transform = new function <string、labeledpoint>(){// stringは特定の行の入力タイプですラベル付きラベルededpointは変換された出力タイプ@Override public labeedpointコール(string row)スロー{//通話方法文字列= row.split( "、"); int rowsize = rowarr.length; double [] doublearer = new double [rowsize-1]; //ファーストレーブルを除き、部分の残りの部分はダブルに解析され、(int i = 1; i <rowsize; i ++){string hirl = rowarr [i];の配列に配置されます。 doublearer [i] = double.parsedouble(hiled); } //取得したデータをベクトルベクトル機能= vectors.dense(doublearer)に変換します。 double label = double.parsedouble(rowarr [0]); //分類トレーニング用のデータ形式を作成しましたラベルポイントラベル付きポイント= new LabeledPoint(Label、feature);リターンポイント; }};特別な注意を払う必要があります:
1.コールメソッドの入力は、変換前のデータ行のタイプである必要があります。返品値は、処理後のデータ行のタイプである必要があります。
2.変換方法でカスタムクラスが呼び出された場合、たとえばクラス名をシリアル化する必要があることに注意してください。
パブリッククラスのツリーコンセンブルはシリアル化可能{}を実装しています3.メソッドなど、一部のクラスオブジェクトが変換関数で呼び出され、外部パラメーターを呼び出す必要がある場合、または数値処理モデル(標準化、正規化など)を呼び出す必要がある場合、オブジェクトを最終的に宣言する必要があります。
次に、必要に応じて変換機能を呼び出します
Javardd <LabeledPoint> rdd = oridata.tojavardd()。map(transform);
この方法では、通常のRDDをJavarddに変換して使用する必要があります。 Javarddへの変換の操作は時間がかかりませんので、心配しないでください
2。フィルター
また、データのnull値や0sの回避などのシナリオでも非常に一般的に使用されており、SQLのWhereの機能を満たすことができます。
まず、関数を定義する必要があります。データラインを考慮してブール値を返すことの実際の効果は、返されたデータをtrueに保持することです。
function <string、boolean> booflowilter = new function <string、boolean>(){//文字列は特定の行の入力タイプです。 Booleanは対応する出力タイプです。データが保持されるかどうかを判断するために使用されます。 @Override public boolean call(string row)スロー例外{//コールメソッドブールフラグ= row!= null;フラグを返します。 }};通常、この関数の実際の使用で変更する必要があるのは、行のタイプ、つまりデータ行の入力タイプのみです。上記の変換関数とは異なり、このコールメソッドの返品値はブール値として修正する必要があります。
次に、通話メソッド
Javardd <LabeledPoint> rdd = oridata.tojavardd()。フィルター(boolfilter);
3。マートペア
この方法は、MAPメソッドに多少似ており、データへの変換も実行します。ただし、この関数の出力はタプル入力ラインです。最も一般的に使用される方法は、相互検証または統計エラー率のリコール計算AUCなどを行うことです。
同様に、最初に変換関数を定義する必要があります
function <string、boolean> transformer = new PairFunction <labeledpoint、object、object>(){// labeledpointは、入力タイプの後の2つのオブジェクトです。 @Override public Tuple2 Call(LabeledPoint row)を変更しないでください。 Double PredictON = thisModel.predict(row.features())を変更しないでください。 double label = row.label();新しいtuple2(Predicton、label)を返します。 }});呼び出しクラスとクラスのオブジェクトに関して、要件は前のオブジェクトと一致しています。クラスをシリアル化する必要があり、クラスオブジェクトは最終タイプとして宣言する必要があります
対応する呼び出しは次のとおりです。
javapairrdd <object、object> predictionsandlabels = oridata.maptopair(transformer);
次に、PredictionSandLabelsを使用するために、精度、想起、精度、およびAUCを計算します。次のブログにはあります。お楽しみに。
要約します
上記は、この記事のコンテンツ全体です。この記事の内容には、すべての人の研究や仕事に特定の参照値があることを願っています。ご質問がある場合は、メッセージを残してコミュニケーションをとることができます。 wulin.comへのご支援ありがとうございます。