データセットの作成
メモリ内に行のセットを作成するには、作成する行の数を知っておく必要があります。この値は、オペレーターの構成時にユーザーが指定する「number of things」パラメーターから取得されます。params 変数からその値を取得します。
始める前にSpark ジョブを設定します。
- 手順
- 次のコードを追加します。
val numberOfRows = params.getIntValue(DatasetGeneratorUtils.numberRowsParamKey) // here we're just using that constant we defined in our Utils class to get the right parameter
値を取得した後、実行時に TIBCO Data Science - Team Studio コンソールに出力することで、その値が正しいかどうかを視覚的に確認することができます。これは、オペレーターの実行中に
listenerオブジェクトを使用して TIBCO Data Science - Team Studio コンソールと通信する方法の例です。 - 次のコードを追加します。
listener.notifyMessage("number of rows is: " + numberOfRows) - データの行を構築します。それらは次のようになります。
Thing, 1 Thing, 2 Thing, 3 ... Thing, n
RowのSeqを作成し、行番号を「Thing」という行にマッピングします。次の例に示すように、指定された量のRowに達するまで続行します。val rowSeq : Seq[Row] = Seq.range(1, numberOfRows+1).map(rowNumber => Row.fromTuple("Thing", rowNumber))ノート:まだ Scala を学習している方にとって、上記のコードは見慣れないものかもしれません。Java ユーザーにとって、このコードを記述するより馴染みのある方法は次のとおりです。val rowArray = Array.ofDim[org.apache.spark.sql.Row](numberOfRows) var i = 1 while(i < numberOfRows+1) { // Using plus one here so that the row number will be indexed from one rowArray(i) = Row.fromTuple("Thing", i+1) i = i+1 }どちらのスニペットも同じことを行いますが、前者は Scala の機能的特徴を利用して、より簡潔な方法でコードを記述します。
この時点では、
rowSeqはメモリに格納されているデータの単なるSeqです。これを Resilient Distributed Dataset (RDD)に変換してから、HDFS データ セットに変換する必要があります。- これを RDD (Spark が動作するデータ構造のタイプ) に変換するには、次のコードを追加します。
val rowRDD = sparContext.Parallelize(rowSeq)
次に行うアクションRDD を HDFS にエクスポートします 。