[英]How to filter rows in H2OFrame (scala) based on a column value?
我正在从CSV文件读取H2OFrame
:
val h2oFrame = new H2OFrame(new File(inputCsvFilePath))
如何执行等效的.filter()
操作(可用于Spark DataFrame
或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
如下所示:
异常:UncaughtExceptionHandler在线程“ Executor任务启动worker-2”中引发了java.lang.OutOfMemoryError
我建议您按原样进行操作-通过Spark。 从常见问题解答 :
如何使用苏打水过滤H2OFrame?
过滤列很容易:只需删除不需要的列或从要包括的列中创建一个新的> H2OFrame(Frame(String []名称,Vec [] vec)),然后对其进行H2OFrame包装(新的H2OFrame(frame ))。
过滤行比较困难。 有两种方法:
为输入/输出样本创建一个附加的1/0二进制矢量(请确保在计算中考虑该附加矢量)。 该解决方案非常便宜,因为您无需复制数据-只需在数据遍历中创建一个简单的向量即可。
要么
使用过滤的行创建一个新框架。 这是一项艰巨的任务,因为您必须复制数据。 作为参考,请查看对Frame(H2OFrame)的#deepSlice调用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.