【问题标题】:How to filter rows in H2OFrame (scala) based on a column value?如何根据列值过滤 H2OFrame (scala) 中的行?
【发布时间】:2016-09-14 03:19:21
【问题描述】:

我正在从 CSV 文件中读取 H2OFrame

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

我怎样才能执行等效的.filter() 操作(适用于 Spark DataFrameRDD)。例如,我如何获得一个新的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

【问题讨论】:

  • 好的,看起来OutOfMemoryError 可以通过将-XX:MaxPermSize=92m 增加到更高的值来解决。仍然想在H2OFrame 上直接回答原始问题的答案。

标签: scala h2o sparkling-water


【解决方案1】:

我建议您按照自己的方式执行此操作 - 通过 Spark。来自FAQ

如何使用苏打水过滤 H2OFrame?

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

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

为输入/输出样本创建一个包含 1/0 的附加二进制向量 (确保在您的 计算)。这个解决方案很便宜,因为你不 重复数据 - 只需在数据遍历中创建一个简单的向量。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 2011-02-05
    • 1970-01-01
    相关资源
    最近更新 更多