首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用SparkR在spark SQL中传递变量?

问如何使用SparkR在spark SQL中传递变量?
EN

Stack Overflow用户
提问于 2020-03-26 15:01:04
回答 1查看 105关注 0票数 0

我是SparkR的新手。我正在尝试使用Qubole Notebook使用SparkR在数据集上编写查询。执行了几个过程,但没有得到输出。

数据: Table_A

代码语言:javascript
复制
ID      Name     month      year
1        A         2        2020
2        B         2        2019
3        c        12        2019

所需输出:

代码语言:javascript
复制
ID      Name     month      year
1        A         2        2020

​

​

变量:

代码语言:javascript
复制
month_value= 2
year_value = 2020

流程1:

代码语言:javascript
复制
temp_data = sql("
select * 
from Table_A
where month = $month_value and year = $year_value")

流程2:

代码语言:javascript
复制
temp_data = sql(s"
select * 
from Table_A
where month = $month_value and year = $year_value")

流程3:

代码语言:javascript
复制
temp_data = sql("
select * 
from Table_A
where month = {0} and year = {1}".format(month_value,year_value))

流程4:

代码语言:javascript
复制
temp_data = sql("
select * 
from Table_A
where month = ${month_value} and year = ${year_value}")

如何使用SparkR传递spark SQL中的变量?

EN

回答 1

Stack Overflow用户

发布于 2020-04-05 07:37:16

过滤可以使用sql函数中的where子句或直接使用filter函数来完成。

使用示例数据进行设置:

代码语言:javascript
复制
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。从名为sdf的SparkDataFrame创建临时视图。然后,您可以使用glue来编写sql代码。它是一个字符串插值器,比使用paste更简洁。

代码语言:javascript
复制
# 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))

结果是:

代码语言:javascript
复制
> (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

代码语言:javascript
复制
> head(filter(sdf, sdf$month == month_value & sdf$year == year_value))
  ID Name month year
1  1    A     2 2020
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60862315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档