如何通过R离开Spark 1.6中的反连接?
我可以设置以下spark v。1.6.0这两个表中的连接和负载如何通过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
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)中的一个)
如果有重复的列名,您也必须对此进行更正
请注意,您不应该:
- 使用
生成全局ID-它不会扩展,因为ans没有提供所需的正确性保证row\u number()
- 在Spark数据帧上使用
。它将数据收集到本地节点,因此无法处理大型数据集copy_to
行编号
和复制到
步骤,以使示例可复制。这最初对我的数据集不起作用-我的id
变量是classdbl
,这导致它在加入后被表示为-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)))