2

私はH2OFrameCSVファイルから読んでいます:

val h2oFrame = new H2OFrame(new File(inputCsvFilePath))

操作に相当するものを実行するにはどうすればよいですか.filter()(SparkDataFrameまたはで利用可能RDD)。たとえば、H2OFrame「ラベル」(列名) がどこにあるかを取得するにはどうすればよい>1ですか?

以下のように変換しようとしましたorg.apache.spark.sql.DataFrame(簡略化された例):

val df = asDataFrame(h2oFrame)
val dff = df.filter(s"label > 1")
print(dff.toString(0,15))

しかし、これは以下のようにスローさOutOfMemoryErrorれるようです:

例外: スレッド "Executor task launch worker-2" の UncaughtExceptionHandler から java.lang.OutOfMemoryError がスローされる

4

1 に答える 1

0

Spark を使用して、これをそのまま行うことをお勧めします。よくある質問から:

Sparkling Water を使用して H2OFrame をフィルタリングするにはどうすればよいですか?

列のフィルタリングは簡単です。不要な列を削除するか、含めたい列から新しい > H2OFrame を作成し (Frame(String[] names, Vec[] vec))、それを囲む H2OFrame ラッパーを作成します (new H2OFrame(frame )))。

行のフィルタリングは少し難しくなります。次の 2 つの方法があります。

イン/アウト サンプルの 1/0 を保持する追加のバイナリ ベクトルを作成します (計算では、この追加のベクトルを必ず考慮してください)。データを複製せず、データ ウォークで単純なベクトルを作成するだけなので、このソリューションは非常に安価です。

また

フィルタリングされた行で新しいフレームを作成します。データをコピーする必要があるため、これは難しい作業です。参考までに、Frame (H2OFrame) の #deepSlice 呼び出しを見てください。

于 2016-07-12T14:12:27.097 に答える