2017-10-12 63 views
0

如何爲火花數據框執行以下任務。 在dplyr,我這樣做:sparkR - 列表中的子集值

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%)命令過濾器?

回答

1

我剛做了類似的問題,這似乎從一個列表的過濾工作:

df3 <- filter(df1, ("x in ('string1','string2','string3')")) 
你的情況

,你可能要考慮加入

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

(可能有點太貴雖然)..

歡呼聲, 安娜

+0

問題是我無法枚舉('string1','string2',...)中的所有x,有1000個這樣的'strings' – user124543131234523

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] 

而且不SparkR使用dplyr。對於dplyr兼容的API使用sparklyr