データセットの作成

メモリ内に行のセットを作成するには、作成する行の数を知っておく必要があります。この値は、オペレーターの構成時にユーザーが指定する「number of things」パラメーターから取得されます。params 変数からその値を取得します。

    手順
  1. 次のコードを追加します。
    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 コンソールと通信する方法の例です。

  2. 次のコードを追加します。
    listener.notifyMessage("number of rows is: " + numberOfRows)
  3. データの行を構築します。それらは次のようになります。
    Thing, 1
    Thing, 2
    Thing, 3
    ...
    Thing, n
  4. RowSeq を作成し、行番号を「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 データ セットに変換する必要があります。

  5. これを RDD (Spark が動作するデータ構造のタイプ) に変換するには、次のコードを追加します。
    val rowRDD = sparContext.Parallelize(rowSeq)
    次に行うアクションRDD を HDFS にエクスポートします