如何根据列值过滤H2OFrame(scala)中的行?

时间:2016-05-17 20:51:24

标签: scala h2o sparkling-water

我正在从CSV文件中读取H2OFrame

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

如何执行等效的.filter()操作(可用于Spark DataFrameRDD)。例如,如何获取新的H2OFrame,其中“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

1 个答案:

答案 0 :(得分:0)

我建议你按照自己的方式做到这一点 - 通过Spark。来自FAQ

  

如何使用苏打水过滤H2OFrame?

     

过滤列很简单:只需删除不必要的列或   创建一个新的>来自您要包含的列的H2OFrame   (Frame(String [] name,Vec [] vec)),然后制作H2OFrame包装器   它周围(新的H2OFrame(框架))。

     

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

     

为输入/输出样本创建一个额外的二进制向量,保持1/0   (确保在你的版本中考虑这个额外的向量   计算)。这个解决方案很便宜,因为你没有   重复数据 - 只需在数据遍历中创建一个简单的向量。

     

     

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