sql 查询在 zeppelin 中转换为 spark lang

Posted

技术标签:

【中文标题】sql 查询在 zeppelin 中转换为 spark lang【英文标题】:sql query translate to spark lang in zeppelin 【发布时间】:2020-02-13 21:19:52 【问题描述】:

我尝试将 sql 查询转移到 spark lang。这是sql查询:

%sql
select $checkbox:fields=AGE|NAME|SEX from table limit $limit=10

那我转spark lang:

%spark
var fields = z.select("fields", Seq(("AGE","AGE"),("NAME","NAME"),("SEX","SEX"))
val lim = z.input("limit","20")
df.selectExpr(fields).limit(lim).show()

但它不起作用。如何收集?

【问题讨论】:

欢迎来到 SO。你尝试了什么?你研究了什么?你的帖子很清楚,但它并没有显示你的工作太多(只是一次试验)。 【参考方案1】:

您在这里错过了几件事。

在 sql 中您使用的是复选框,而在 scala/spark 中您使用的是 select。在复选框中,您可以选择多个值,而在选择中您只能选择 1 个值。在其余答案中,我假设您要进行多项选择。

在 scala 中试试这个:

 val f = z.checkbox("fields", options).to[collection.immutable.Seq]
 val lim = z.input("limit","20").asInstanceOf[String].toInt
 //Assuming df is already defined
 df.selectExpr(f.map(c => (c+"")): _*).limit(lim).show()
 df.select(f.map(c => col(c+"")): _*).limit(lim).show()

z.input 返回一个对象。 spark DF 中的 limit 以 Int 作为输入,因此我们将其转换为 Int。 z.checkbox返回scala.collection.Iterable,而selectExpr/select需要不同类型的输入。

【讨论】:

以上是关于sql 查询在 zeppelin 中转换为 spark lang的主要内容,如果未能解决你的问题,请参考以下文章

Zeppelin:使用 SQL 查询数据并使用它的最佳方法是啥?

保存/导出 Spark SQL Zeppelin 查询的结果

在 Zeppelin 中保存 AWS Athena 查询的结果

Zeppelin:使用自定义的sql解释器截断输出

使用 Spark 配置 Apache Zeppelin

从 Apache Zeppelin 对 AWS Athena 运行时,SQL 查询将永远运行