【问题标题】:dynamic interactive dashboard with zeppelin notebook带有 zeppelin 笔记本的动态交互式仪表板
【发布时间】:2017-01-09 19:57:22
【问题描述】:

我想要一个更具交互性的仪表板。就像从数据库中读取数据,将其提供给选择框,选择框的 onchange 发送值并运行查询。

我想在选定的值上使用 zeppelin bcz 来实现这一点,我必须显示分析。

实现这一目标的方法是什么,这是否可以通过 zeppelin 实现。

我尝试使用选择框,但我无法保存所选值并将其发送到下一个查询并执行它。 像

select age, count(1) value 
from bank 
where marital="${marital=single,single|divorced|married}" 
group by age 
order by age

我不知道如何存储此参数并将所选参数从一个段落发送到另一个段落

或者像从 UI 处理所有这些事情,比如说 javascript html 并将选择的值作为参数发送到 zeppelin?就像是 这在使用 url 时

<iframe src="http://myipaddress:8080/#/notebook/2BWCNP7V8/paragraph/20160831-115204_1774035770?asIframe&param1=value1&param2=value2" width="500" height="300"  scrolling="no" frameBorder="0" id="iframe1" style="text-align:center;" >Browser not compatible.</iframe>

并在我的 zeppelin 段落中使用这些 param1=value1&param2=value2? 技术上可行与否我不明白。 请帮助我如何实现这一目标? 在此先感谢:)

【问题讨论】:

  • 请检查这是不是你想要的,stackoverflow.com/questions/38335170/…
  • 我需要类似 select name,nameid from table1 的东西,这将是我的第一个选择框,在选择我的第二个选择框即 select data,dataid from table2 where nameid='PreviouslySelectedNameID' 时,然后将第二个选择的值传递给我的下一个查询以获得结果.. :(
  • 你可以创建它。在z.select 中,Seq 需要从您的 select 语句中创建。
  • 我可以做 z.select ,但是如何在第二次选择中给 where nameid='PreviouslySelectedNameID' ?如何保留选定的值?我需要存储它吗?

标签: javascript html iframe apache-zeppelin spark-notebook


【解决方案1】:

我们可以通过以下代码获取所有婚姻

val maritals = bank.select("marital").distinct.collect.map(_.getString(0))

并转换为 seq ZeppelinContext 想要

val seq = mairitals.zipWithIndex.map{case (x,y) => (y.toString, x)}.toSeq

那我们可以这样选择

val index = z.select("marital", "1", seq)
val marital = seq(index.toString.toInt)._2

marital 可用于进一步处理。喜欢。

val sql = s"""select distinct job from bank where marital=="$marital""""

sqlContext.sql(sql).show

或者当我使用spark-highcharts 时。在这种情况下,我想绘制特定婚姻状况的年龄平均余额。

highcharts(bank.filter(col("marital") === marital)
  .series("x" -> "age", "y" -> avg(col("balance")))
  .orderBy(col("age"))).plot()

注意:只有带有select 的段落会在值更改时自动执行。

【讨论】:

  • 感谢您的详细回答,当我做val maritals = bank.select("marital").distinct.collect.map(_.getString(0)) 时,它说的是&lt;console&gt;:30: error: value select is not a member of org.apache.spark.rdd.RDD[Bank] bank.select("marital").distinct.collect.map(_.getString(0))...这里有什么问题?我需要做什么?
  • 错误消息显示select is not a member of RDD。这意味着您的 bank 是 RDD 而不是 DataFrame。查看 Zeppelin 教程如何创建银行有帮助。
  • val sql = s"""select distinct job from bank where marital=="$marital"""" sqlContext.sql(sql).collect 给出java.lang.RuntimeException: [1.33] failure: identifier expected select * from bank where marital=="single" ^ 但如果我这样做 `%sql select * from bank where marital=="single"` 它正在工作。当我像sqlContext.sql("select * from bank where marital=='single'").show 一样给出原始查询进行测试时,它正在抛出java.lang.RuntimeException: Table Not Found: bank .... 问题出在哪里?我试过这里提供的答案,但没有运气stackoverflow.com/a/30276247
  • 错误信息通常包含非常有用的信息。按照错误信息将让您找到解决方案。它说Table NOT found
  • 是的,我读到了,但是如果表不存在,那么它将如何执行 %sql select * from bank where marital=="single"?.. 我可以在 %sql 中执行此查询,但不能像 sqlContext.sql() 那样执行,这就是我的位置我很困惑.. 并且要执行 bank.select("marital").distinct.collect.map(_.getString(0)) 它必须是 DF,正如您在之前的评论中提到的那样.. 这工作意味着 DF 没有问题,对吧?
猜你喜欢
  • 2021-08-27
  • 2016-12-25
  • 2017-05-30
  • 1970-01-01
  • 2012-12-07
  • 2016-07-04
  • 2015-04-21
  • 2017-03-22
  • 1970-01-01
相关资源
最近更新 更多