我正在使用R中的数据集,其中包含42,457行和785列。第一列是二进制响应变量(称为label
),其余列是二进制特征。
我尝试使用rsparkling
(描述为here)来拟合逻辑回归模型,但却出错了。我将此跟踪到将此表的Spark版本转换为H2O数据框的步骤。
这是我用于测试的功能。 Spark实例sc
已启动并正在运行,df
是原始数据集作为标准R数据框:
load_h2o <- function(df, rows = nrow(df), cols = ncol(df)) {
df <- df[1:rows, 1:cols]
copy_to(sc, df, "df", overwrite = TRUE)
df_tbl <- tbl(sc, "df")
h2o_tbl <- as_h2o_frame(sc, df_tbl, strict_version_check=FALSE)
return(h2o_tbl)
}
df$label
的负责人是1 1 1 0 0 0
。但是,如果我加载完整的数据集,即load_h2o(raw_data)
,则生成的label
列的标题为0 0 0 0 0 0
;事实上,H2O数据框中的所有值都是0.如果我将列数限制为200(即load_h2o(raw_data, cols = 200)
),则生成的H2O数据框包含所需的所有数据。如果cols = 201
,我们将返回全零。
最后,如果我使用h2o::h2o.importFile
直接从磁盘加载数据集,那么完整的数据集没有问题,我能够适应逻辑回归。但是,我希望能够从R数据框加载它,以便在包中分发对象。
此工作流程的最大列数是否有限制?
答案 0 :(得分:0)
我们正在使用Spark 1.6.2,我相信这是known bug。
答案 1 :(得分:0)
H2O中没有明确的列限制(当然不是785,这不是很大)。 Spark 1.6现在很老了,我建议继续前进。
看看您所看到的内容是否与此问题有关:
https://0xdata.atlassian.net/browse/PUBDEV-3808
如果是这样,发现的一个解决方法是将.cache()中的数据帧传递给H2O。