在SparkR操作中引用两个单独的DataFrame

时间:2016-07-14 14:39:32

标签: r apache-spark apache-spark-sql sparkr

我正在尝试将DataFrame(DF)B拆分为两个不同的(按行)子集。我首先sample DF生成一个新的DF,包括约。来自B的一半行。然后,我尝试在DF上filter,条件是此新DF,b2包含B的每一行,其中<{1}}值不等于< / em>到z中包含的z值。

这似乎应该相当简单。但是,b1表达式只会导致空DataFrame。我是否误解了filter的语法,或者您只是不能在SparkR操作中引用不同的DataFrame?

filter

2 个答案:

答案 0 :(得分:1)

这里实际上有两个不同的问题:

  • 一般情况下,如果不首先执行某种类型的join操作,则无法在过滤器中引用另一个表。
  • 在这个特殊的情况下,由于共同的血统,这构造了一个平凡的真正平等(它与SPARK-6231类似的问题),因此没有异常但是空结果集。

因为现在(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)