sparkR - 列表中的子集值

时间:2017-10-12 15:16:29

标签: r apache-spark filter sparkr

如何为火花数据框执行以下任务。 在dplyr中,我会这样做:

library(dplyr)
df1 <- data.frame(x = 1:10, y = 101:110)
df2 <- data.frame(r = 5:10, s = 205:210)
df3 <- df1 %>% filter(x %in% df2$r)

如何为sparkR数据帧执行过滤器(%df2 $ r中的x%)命令?

2 个答案:

答案 0 :(得分:1)

我刚才有类似的问题,这似乎适用于从列表中过滤:

df3 <- filter(df1, ("x in ('string1','string2','string3')"))

在您的情况下,您可能需要考虑加入

df3 <- drop(join(df1, SparkR::distinct(SparkR::select(df2,'r')), df1$x==df2$r),'r')

(虽然可能有点贵)..

欢呼声, 安娜

答案 1 :(得分:1)

要么不将查找转换为SparkDataFrame

> df1 <- createDataFrame(data.frame(x = 1:10, y = 101:110))
> df2 <- data.frame(r = 5:10, s = 205:210)
> filter(df1, df1$x %in% df2$r)
SparkDataFrame[x:int, y:int]

或转换两者和join

> df1 <- createDataFrame(data.frame(x = 1:10, y = 101:110))
> df2 <- createDataFrame(data.frame(r = 5:10, s = 205:210))
> join(df1, df2, df1$x == df2$r, "leftsemi")
SparkDataFrame[x:int, y:int]

不要将dplyr与SparkR一起使用。对于dplyr兼容API,请使用sparklyr