我正在从CSV文件中读取H2OFrame
:
val h2oFrame = new H2OFrame(new File(inputCsvFilePath))
如何执行等效的.filter()
操作(可用于Spark DataFrame
或RDD
)。例如,如何获取新的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
答案 0 :(得分:0)
我建议你按照自己的方式做到这一点 - 通过Spark。来自FAQ:
如何使用苏打水过滤H2OFrame?
过滤列很简单:只需删除不必要的列或 创建一个新的>来自您要包含的列的H2OFrame (Frame(String [] name,Vec [] vec)),然后制作H2OFrame包装器 它周围(新的H2OFrame(框架))。
过滤行有点困难。有两种方法:
为输入/输出样本创建一个额外的二进制向量,保持1/0 (确保在你的版本中考虑这个额外的向量 计算)。这个解决方案很便宜,因为你没有 重复数据 - 只需在数据遍历中创建一个简单的向量。
或
使用已过滤的行创建新框架。这是一项艰巨的任务, 因为你必须复制数据。作为参考,请查看#deepSlice 调用帧(H2OFrame)