如何使用sparklyr将两个Spark数据框进行行绑定?

4
我尝试将两个Spark数据框进行行绑定,但是出现了错误信息。
library(sparklyr)
library(dplyr)
sc <- spark_connect(master = "local")
iris_tbl <- copy_to(sc, iris)
iris_tbl1 <- copy_to(sc, iris, "iris1")

iris_tbl2 = bind_rows(iris_tbl, iris_tbl1)

什么是将两个Spark数据框绑定在一起的最有效方法?
1个回答

6
您可以使用 dplyr::union_all
dplyr::union_all(iris_tbl1, iris_tbl1)

或者使用 sparklyr::sdf_bind_rows:
sdf_bind_rows(
  iris_tbl %>% select(-Sepal_Length),
  iris_tbl1 %>% select(-Petal_Length)
)

如果模式兼容但列的顺序不匹配,您也可以使用Spark自己的unionByName
sdf_union_by_name <- function(x, y) {
  invoke(spark_dataframe(x), "unionByName", spark_dataframe(y)) %>% 
    sdf_register()
}

sdf_union_by_name(
  iris_tbl %>% select(Sepal_Length, Petal_Length),
  iris_tbl %>% select(Petal_Length, Sepal_Length)
)

1
你为什么需要在invoke中使用spark_dataframe(...)呢?x已经是一个Spark DataFrame的引用了,对吧? - Siete

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接