Фильтрацию можно выполнить с помощью предложения where
в функции sql
или напрямую с помощью функции filter
.
Настройка с данными образца:
library(SparkR, lib.loc = c(file.path(Sys.getenv("SPARK_HOME"), "R", "lib")))
sparkR.session(master = "local[*]", sparkConfig = list(spark.driver.memory = "8g"))
local_df <- data.frame(ID=c(1, 2 ,3),
Name=c("A", "B", "c"),
month=c(2, 2, 12),
year=c(2020, 2019, 2019))
month_value <- 2
year_value <- 2020
sdf <- createDataFrame(local_df)
Первый подход с использованием sql
. Создайте временное представление из SparkDataFrame с именем sdf
. Затем вы можете использовать glue
для составления кода sql. Это строковый интерполятор, который чище, чем при использовании paste
.
# 1) SQL function (string interpolation)
createOrReplaceTempView(sdf, "Table_A")
(sql_expanded <- as.character(glue::glue(
"select * from Table_A where (month == {month_value}) and (year == {year_value})")))
head(sql(sql_expanded))
Результат:
> (sql_expanded <- glue::glue(
+ "select * from Table_A where (month == {month_value}) and (year == {year_value})"))
select * from Table_A where (month == 2) and (year == 2020)
> head(sql(as.character(sql_expanded)))
ID Name month year
1 1 A 2 2020
Второй вариант с использованием filter
> head(filter(sdf, sdf$month == month_value & sdf$year == year_value))
ID Name month year
1 1 A 2 2020