我正在尝试将DataFrame(DF)B
拆分为两个不同的(按行)子集。我首先sample
DF生成一个新的DF,包括约。来自B
的一半行。然后,我尝试在DF上filter
,条件是此新DF,b2
包含B
的每一行,其中<{1}}值不等于< / em>到z
中包含的z
值。
这似乎应该相当简单。但是,b1
表达式只会导致空DataFrame。我是否误解了filter
的语法,或者您只是不能在SparkR操作中引用不同的DataFrame?
filter
答案 0 :(得分:1)
这里实际上有两个不同的问题:
join
操作,则无法在过滤器中引用另一个表。因为现在(Spark 1.6)SparkR没有提供randomSplit
你可以手动应用分割
seed <- stats::runif(1)
b <- B %>% withColumn("rand", rand(seed))
b1 <- b %>% where(b$rand <= 0.5)
b2 <- b %>% where(b$rand > 0.5)
答案 1 :(得分:1)
SparkR提供了一组基于Spark SQL的函数,可以提供有用的数据处理功能。实现这一点的一种方法是使用SparkR except()命令(将其想象为SQL中的!= join):
w <- rbind(3, 0, 2, 3, NA, 1)
z <- rbind("a", "b", "c", "d", "e", "f")
d2 <- cbind.data.frame(w, z)
B <- as.DataFrame(sqlContext, d2)
b1 <- sample(B, FALSE, 0.5)
b2 <- except(B, b1)