Cerco di eseguire i seguenti semplici comandi in Apache Zeppelin.
%flink
var rabbit = env.fromElements(
"ARTHUR: What, behind the rabbit?",
"TIM: It is the rabbit!",
"ARTHUR: You silly sod! You got us all worked up!",
"TIM: Well, that"s no ordinary rabbit. That"s the most foul, cruel, and bad-tempered rodent you ever set eyes on.",
"ROBIN: You tit! I soiled my armor I was so scared!",
"TIM: Look, that rabbit"s got a vicious streak a mile wide, it"s a killer!")
var counts = rabbit.flatMap { _.toLowerCase.split("\W+")}.map{ (_,1)}.groupBy(0).sum(1)
counts.print()
Provo a stampare i risultati sul notebook. Ma sfortunatamente, ottengo solo il seguente risultato.
rabbit: org.apache.flink.api.scala.DataSet[String] = org.apache.flink.api.scala.DataSet@37fdb65c
counts: org.apache.flink.api.scala.AggregateDataSet[(String, Int)] = org.apache.flink.api.scala.AggregateDataSet@1efc7158
res103: org.apache.flink.api.java.operators.DataSink[(String, Int)] = DataSink "<unnamed>" (Print to System.out)
Come posso versare il contenuto dei conteggi nel blocco note in Zeppelin?
risposte:
4 per risposta № 1La ragione del comportamento osservato risiede nell'interazione tra Apache Zeppelin e Apache Flink. Zeppelin cattura tutti gli output standard di Console
. Tuttavia, Flink stampa anche l'output su System.out
e questo è esattamente quello che sta succedendo quando chiami counts.print()
. Il motivo per cui la soluzione di bzz funziona è che stampa il risultato usando Console
.
Ho aperto un problema JIRA [1] e ho aperto una richiesta pull [2] per correggere questo comportamento in modo da poterlo utilizzare counts.print()
.
- [1] https://issues.apache.org/jira/browse/ZEPPELIN-287
- [2] https://github.com/apache/incubator-zeppelin/pull/288
5 per risposta № 2
Il modo per stampare il risultato di tale calcolo in Zeppelin è:
%flink
counts.collect().foreach(println(_))
//or one might prefer
//counts.collect foreach println
Produzione:
(a,3)
(all,1)
(and,1)
(armor,1)
...