динамическая интерактивная приборная панель с записной книжкой zeppelin

Я хочу иметь более интерактивную панель инструментов. например, чтение данных из базы данных, передача их в поле выбора, при изменении поля выбора отправьте значение и запустите запрос.

я хочу добиться этого, используя zeppelin bcz для выбранного значения, которое мне нужно отобразить в аналитике.

как этого добиться и возможно ли это сделать с помощью цеппелина.

я пробовал с полем выбора, но не смог сохранить выбранное значение и отправить его в следующий запрос и выполнить его. что-то типа

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

я не понял, как сохранить этот параметр и отправить выбранные параметры из одного абзаца в другой

или что-то вроде обработки всех этих вещей из пользовательского интерфейса, скажем, javascript html и отправки выбранного значения в качестве параметра в цеппелин? что-то вроде этого при использовании 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>

и использовать эти param1=value1¶m2=value2 в абзаце моего цеппелина? технически выполнимо или нет я не понимаю. пожалуйста, помогите мне, как этого добиться? заранее спасибо :)


person Priyanka D L    schedule 01.09.2016    source источник
comment
проверьте, хотите ли вы этого, stackoverflow.com/questions/38335170/   -  person Rockie Yang    schedule 02.09.2016
comment
мне нужно что-то вроде select name,nameid from table1, это будет мое первое поле выбора, при выборе чего-то мое второе поле выбора, т.е. select data,dataid from table2 where nameid='PreviouslySelectedNameID', а затем передайте второе выбранное значение в мой следующий запрос, чтобы получить результат.. :(   -  person Priyanka D L    schedule 02.09.2016
comment
Вы можете создать это. в z.select необходимо создать Seq из вашего оператора выбора.   -  person Rockie Yang    schedule 02.09.2016
comment
я могу сделать z.select , но как дать where nameid='PreviouslySelectedNameID' во втором выборе? как сохранить выбранное значение? мне нужно его сохранить?   -  person Priyanka D L    schedule 02.09.2016


Ответы (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 будет выполняться автоматически при изменении значения.

person Rockie Yang    schedule 02.09.2016
comment
спасибо за подробный ответ, когда я делаю val maritals = bank.select("marital").distinct.collect.map(_.getString(0)), он говорит <console>:30: error: value select is not a member of org.apache.spark.rdd.RDD[Bank] bank.select("marital").distinct.collect.map(_.getString(0))... в чем проблема? Что мне нужно сделать? - person Priyanka D L; 17.09.2016
comment
Сообщение об ошибке говорит select is not a member of RDD. Это означает, что ваш bank - это RDD, а не DataFrame. Ознакомьтесь с руководством по Zeppelin, как создать банк. - person Rockie Yang; 17.09.2016
comment
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 * из банка, где marital==single`, он работает. и когда я даю необработанный запрос для проверки, например sqlContext.sql("select * from bank where marital=='single'").show, он выдает java.lang.RuntimeException: Table Not Found: bank .... в чем проблема? я попробовал ответ, представленный здесь, но не повезло stackoverflow.com/a/30276247 - person Priyanka D L; 19.09.2016
comment
Сообщение об ошибке обычно содержит действительно полезную информацию. Следуйте сообщению об ошибке, чтобы найти решение. Там написано Table NOT found. - person Rockie Yang; 20.09.2016
comment
да, я это читал, но если таблицы там не было, то как она будет выполнять %sql select * from bank where marital=="single"?.. я мог бы выполнить этот запрос в %sql, но не как sqlContext.sql(), вот тут я запутался.. и для выполнения bank.select("marital").distinct.collect.map(_.getString(0)) он должен быть DF как вы упомянули в предыдущем комментарии .. это работает, значит, с DF проблем нет, верно? - person Priyanka D L; 20.09.2016
comment
Должно быть, что-то не так в вашем окружении. Попробуйте проверить логи и перезапустить цеппелин, может поможет. - person Rockie Yang; 20.09.2016