代码之家  ›  专栏  ›  技术社区  ›  xiaodai

如何使用SparkYR行绑定两个Spark数据帧?

  •  1
  • xiaodai  · 技术社区  · 8 年前

    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 回复  |  直到 8 年前
        1
  •  2
  •   zero323 little_kid_pea    8 年前

    你可以用 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)
    )