2

我正在H2OFrame从 CSV 文件中读取:

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

如何执行等效的.filter()操作(可用于 SparkDataFrameRDD)。例如,我如何获得一个新的H2OFramewhere “label”(这是一个列名)在>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。从常见问题解答

如何使用苏打水过滤 H2OFrame?

过滤列很容易:只需删除不必要的列或从要包含的列中创建一个新的 > H2OFrame (Frame(String[] names, Vec[] vec)),然后围绕它制作 H2OFrame 包装器 (new H2OFrame(frame ))。

过滤行有点困难。有两种方法:

为输入/输出样本创建一个额外的包含 1/0 的二进制向量(确保在计算中考虑这个额外的向量)。该解决方案非常便宜,因为您不会复制数据 - 只需在数据遍历中创建一个简单的向量。

或者

使用过滤后的行创建一个新框架。这是一项艰巨的任务,因为您必须复制数据。作为参考,请查看 Frame (H2OFrame) 上的#deepSlice 调用

于 2016-07-12T14:12:27.097 回答