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 查询的结果