H2O-R:在 H2OFrame 的每一行上应用自定义库函数
H2O-R: Apply custom library function on each row of H2OFrame
在我的机器上将 MySQL 中的一个相对较大的 table 导入到 H2O 后,我尝试在其中一个列上 运行 哈希算法 (murmurhash from the R digest package)并将其保存回 H2O。正如我发现的那样,并不总是建议在 H2OFrame 对象上使用 as.data.frame
:最初我的 H2OFrame 大约有 43k 行,但由于某些原因强制转换的 DataFrame 通常只包含 30k 行(使用 [= 也是如此) 13=]/base::sapply
/H2OFrame 上的等)。
我发现还有一个用于 H2OFrames 的 apply
函数,但据我所知,它只能与内置的 R 函数一起使用。
因此,例如我的代码如下所示:
data[, "subject"] <- h2o::apply(data[, "subject"], 2, function(x)
digest(x, algo = "murmur32"))
我收到以下错误:
Error in .process.stmnt(stmnt, formalz, envs) :
Don't know what to do with statement: digest
我知道只有来自 Java 后端的预定义函数可以用于操作 H2O 数据,但是也许有另一种方法可以从客户端使用摘要包而不将数据转换为数据框?我在想,在最坏的情况下,我将不得不先使用 R-MySQL 驱动程序加载数据,将其作为 DataFrame 进行操作,然后将其上传到 H2O 云。提前感谢您的帮助。
由于 H2O 的工作方式,它不能像将任何函数应用于常规 R data.frame 那样支持应用于 H2OFrames 的任意用户定义函数。我们已经在 H2O 后端使用了 Murmur 哈希函数,因此我添加了一个 JIRA ticket 以将其暴露给 H2O R 和 Python API。同时我建议的是仅将感兴趣的单个列从 H2O 集群复制到 R,应用 digest
函数,然后用结果更新 H2OFrame。
以下代码会将 "subject"
列作为 1 列 data.frame 拉入 R。然后,您可以使用基本 R apply
函数将 murmur 哈希应用于每一行,最后您可以将生成的 1 列 data.frame 复制回原始 H2OFrame 中的 "subject"
列, 称为 data
.
sub <- as.data.frame(data[, "subject"])
subhash <- apply(sub, 1, digest, algo = "murmur32")
data[, "subject"] <- as.h2o(subhash)
因为你只有 43k 行,我希望你仍然能够在一台普通的笔记本电脑上毫无问题地做到这一点,因为你只是从 H2O 集群复制一个列到 R 内存(而不是比整个数据框)。
在我的机器上将 MySQL 中的一个相对较大的 table 导入到 H2O 后,我尝试在其中一个列上 运行 哈希算法 (murmurhash from the R digest package)并将其保存回 H2O。正如我发现的那样,并不总是建议在 H2OFrame 对象上使用 as.data.frame
:最初我的 H2OFrame 大约有 43k 行,但由于某些原因强制转换的 DataFrame 通常只包含 30k 行(使用 [= 也是如此) 13=]/base::sapply
/H2OFrame 上的等)。
我发现还有一个用于 H2OFrames 的 apply
函数,但据我所知,它只能与内置的 R 函数一起使用。
因此,例如我的代码如下所示:
data[, "subject"] <- h2o::apply(data[, "subject"], 2, function(x)
digest(x, algo = "murmur32"))
我收到以下错误:
Error in .process.stmnt(stmnt, formalz, envs) :
Don't know what to do with statement: digest
我知道只有来自 Java 后端的预定义函数可以用于操作 H2O 数据,但是也许有另一种方法可以从客户端使用摘要包而不将数据转换为数据框?我在想,在最坏的情况下,我将不得不先使用 R-MySQL 驱动程序加载数据,将其作为 DataFrame 进行操作,然后将其上传到 H2O 云。提前感谢您的帮助。
由于 H2O 的工作方式,它不能像将任何函数应用于常规 R data.frame 那样支持应用于 H2OFrames 的任意用户定义函数。我们已经在 H2O 后端使用了 Murmur 哈希函数,因此我添加了一个 JIRA ticket 以将其暴露给 H2O R 和 Python API。同时我建议的是仅将感兴趣的单个列从 H2O 集群复制到 R,应用 digest
函数,然后用结果更新 H2OFrame。
以下代码会将 "subject"
列作为 1 列 data.frame 拉入 R。然后,您可以使用基本 R apply
函数将 murmur 哈希应用于每一行,最后您可以将生成的 1 列 data.frame 复制回原始 H2OFrame 中的 "subject"
列, 称为 data
.
sub <- as.data.frame(data[, "subject"])
subhash <- apply(sub, 1, digest, algo = "murmur32")
data[, "subject"] <- as.h2o(subhash)
因为你只有 43k 行,我希望你仍然能够在一台普通的笔记本电脑上毫无问题地做到这一点,因为你只是从 H2O 集群复制一个列到 R 内存(而不是比整个数据框)。