【问题标题】:How to do cross join between two H2OFrame in R?如何在 R 中的两个 H2OFrame 之间进行交叉连接?
【发布时间】:2018-05-10 21:45:51
【问题描述】:

我想在两个 H2OFrame 之间进行交叉连接。寻找解决方法严格在 H2OFrame 中

col1.1 <- c('A', 'B', 'E', 'C', 'F', 'D')
dummy <- rep(1,6)

d1.hex <- as.h2o( cbind( col1.1, dummy ) )

col2.1 <- c('xx', 'yy', 'zz', 'ww')

dummy <- rep(1,4)

d2.hex <- as.h2o( cbind( col2.1, dummy ) )

如果我使用 all =TRUE 它会抛出 Error : unimplemented

h2o.merge(d1.hex, d2.hex, all = TRUE)

如果我使用默认,加入结果不是交叉加入

h2o.merge(d1.hex, d2.hex )

虚拟 col1.1 col2.1

1 A xx

1 B xx

1 E xx

1 C xx

1 F xx

1D xx

我尝试将连接列的数据类型更改为分类或数字,但没有成功。寻求您的帮助以解决问题。

谢谢

【问题讨论】:

  • 所以我对 h2o 不太熟悉,但这就是您遇到问题的地方。 merge(df1, df2, all = TRUE) 似乎是在 R 中交叉加入的正确方法。
  • 谢谢@MattW。但我正在寻找 H2OFrame 中的解决方案。从读取文件到进行预测,我正在尝试使用 H2O,我的数据集非常庞大。

标签: r h2o cross-join


【解决方案1】:

令人沮丧的答案是你不能,并且已经有两个错误报告:

https://0xdata.atlassian.net/browse/PUBDEV-4516

https://0xdata.atlassian.net/browse/PUBDEV-3699

最简单的解决方法是下载所有数据,然后在 R 客户端中进行。但是对于大数据,这可能是不可能的。如果您必须在 H2O 集群中执行此操作,您将需要一个循环:

  1. 将 d1.hex 中第一个唯一值的行复制到 tmp
  2. tmp2 = h2o.merge(tmp, d2.hex, all.y = TRUE)

对 d1.hex 中的每个唯一值重复。然后,最后,对所有 tmp2 表执行 h2o.rbind()

或者,经典的开源解决方案:自己实现未实现的代码(或请求/支付 h2o.ai 来实现它)。

【讨论】:

  • 谢谢@Darren。感谢您的帮助和准确的回答。
猜你喜欢
  • 2012-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-11
相关资源
最近更新 更多