如何通过R离开Spark 1.6中的反连接?

如何通过R离开Spark 1.6中的反连接?,r,apache-spark,dplyr,sparklyr,R,Apache Spark,Dplyr,Sparklyr,我可以设置以下spark v。1.6.0这两个表中的连接和负载 library(sparklyr) library(dplyr) sc <- spark_connect(master = "local", version = "1.6.0", hadoop_version = 2.4) iris_r <- iris %>% mutate(id = row_num

我可以设置以下spark v。1.6.0这两个表中的连接和负载

library(sparklyr)
library(dplyr)

sc <- spark_connect(master         = "local",
                    version        = "1.6.0",
                    hadoop_version = 2.4)

iris_r   <- iris %>% mutate(id = row_number())
mtcars_r <- mtcars %>% mutate(id = row_number())

iris_db   <- copy_to(sc, iris_r, name = "iris_db", overwrite = TRUE)
mtcars_db <- copy_to(sc, mtcars_r, name = "mtcars_db", overwrite = TRUE)

df <- iris_db %>% anti_join(mtcars_db, by = "id")

df

如果我切换到Spark 2.0.1,这个错误就会消失。对于这个问题,假设我被迫使用1.6。是否有支持的方式执行此联接?

左反联接
可以替换为
完全外部联接
,然后选择:

df1 <- copy_to(sc, 
  data.frame(id=c(1, 2, 3), x=c("a", "b", "c")),
  name="df1", overwrite=TRUE)

df2 <- copy_to(sc,
  data.frame(id=c(1, 3), y=c(2, -2)), 
  name="df2", overwrite=TRUE)

df1 %>% 
  full_join(df2 %>% mutate(id_ = id), by="id") %>% 
  filter(is.null(id_)) %>% 
  select(one_of(colnames(df1)))
df1%mutate(id=id),by=“id”)%%>%
筛选器(为.null(id)))%>%
选择(colnames(df1)中的一个)
如果有重复的列名,您也必须对此进行更正

请注意,您不应该:

  • 使用
    row\u number()
    生成全局ID-它不会扩展,因为ans没有提供所需的正确性保证
  • 在Spark数据帧上使用
    copy_to
    。它将数据收集到本地节点,因此无法处理大型数据集

感谢您的额外建议,仅包括
行编号
复制到
步骤,以使示例可复制。这最初对我的数据集不起作用-我的
id
变量是class
dbl
,这导致它在加入后被表示为
-9.223372e+18
,而不是
NaN
(参见此处的问题)。但是它在
上作为.integer(id)
df1 <- copy_to(sc, 
  data.frame(id=c(1, 2, 3), x=c("a", "b", "c")),
  name="df1", overwrite=TRUE)

df2 <- copy_to(sc,
  data.frame(id=c(1, 3), y=c(2, -2)), 
  name="df2", overwrite=TRUE)

df1 %>% 
  full_join(df2 %>% mutate(id_ = id), by="id") %>% 
  filter(is.null(id_)) %>% 
  select(one_of(colnames(df1)))