我尝试使用SparkRdataframe上的vector对一系列条件进行多个变量过滤。
用tidyverse在一个普通的 Dataframe 上做这件事是很简单的。举例来说:
library("tidyverse")
library("magrittr")
# filter vectors
filter_var1 <- c('111', '222')
filter_var2 <- c('a', 'c')
#create df
df <- data.frame(var1 = c("111", "222", "333", "333"), var2 = c("a", "a", "b", "c"))
df
# filter
df_filtered <- df %>% dplyr::filter( (var1 %in% filter_var1) | (var2 %in% filter_var2))
df_filtered
尝试为单个变量过滤器做类似的事情有点繁琐,但可行(来自:sparkR example 1、sparkR example 2):
library(SparkR)
# Initialize a Spark session
sparkR.session(appName = "Create DataFrame Example")
# Create a data frame in SparkR
spark_df <- createDataFrame(data.frame(var1 = c("111", "222", "333", "333"), var2 = c("a", "a", "b", "c")))
# Show the data frame
showDF(spark_df)
spark_df_filtered <- spark_df %>% SparkR::filter(., (
paste("var1 in ('", paste(filter_var1, collapse = "','"), "')", sep = "")
))
但是我在使用AND(&&
)/ OR(||
)语句时遇到了困难,在同一个filter语句中添加更多的条件。我确实找到了一个使用sparkR::subset
here的例子,但是当试图使用向量来实现过滤时,我遇到了问题。
1条答案
按热度按时间nmpmafwu1#
您可以使用
%in%
S4方法来匹配列中的值。使用|
作为OR,&
作为AND运算符。