在 SparkR 操作中引用两个单独的 DataFrame
Reference two separate DataFrames in SparkR operations
我正在尝试将 DataFrame (DF) B
拆分为两个不同的(按行)子集。我首先 sample
DF 生成一个新的 DF,其中包括大约。 B
中的一半行。然后,我尝试在 DF 上 filter
,条件是这个新的 DF,b2
包括 B
的每一行,其中 z
的值不是 等于 b1
.
中包含的 z
值
这看起来应该相当简单。但是,filter
表达式只会产生一个空的 DataFrame。我是否误解了 filter
的语法,或者您是否可以简单地在 SparkR 操作中不引用不同的数据帧?
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 <- filter(B, B$z != b1$z)
这里实际上有两个不同的问题:
- 一般来说,如果不先执行某种类型的
join
操作,就不能引用另一个 table 内部过滤器。
- 在这个特殊情况下,由于共同的血统,这构造了一个平凡的真相等(它与 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)
SparkR 提供了一组基于 Spark SQL 构建的函数,这些函数提供了有用的数据操作能力。实现此目的的一种方法是使用 SparkR except() 命令(将其视为 != join in SQL):
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)
我正在尝试将 DataFrame (DF) B
拆分为两个不同的(按行)子集。我首先 sample
DF 生成一个新的 DF,其中包括大约。 B
中的一半行。然后,我尝试在 DF 上 filter
,条件是这个新的 DF,b2
包括 B
的每一行,其中 z
的值不是 等于 b1
.
z
值
这看起来应该相当简单。但是,filter
表达式只会产生一个空的 DataFrame。我是否误解了 filter
的语法,或者您是否可以简单地在 SparkR 操作中不引用不同的数据帧?
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 <- filter(B, B$z != b1$z)
这里实际上有两个不同的问题:
- 一般来说,如果不先执行某种类型的
join
操作,就不能引用另一个 table 内部过滤器。 - 在这个特殊情况下,由于共同的血统,这构造了一个平凡的真相等(它与 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)
SparkR 提供了一组基于 Spark SQL 构建的函数,这些函数提供了有用的数据操作能力。实现此目的的一种方法是使用 SparkR except() 命令(将其视为 != join in SQL):
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)