zeppelin中如何使用watcher和z.run运行段落顺序模式?

时间:2018-09-14 10:33:40

标签: apache-zeppelin

我正在使用Zeppelin通过MongoDB Spark和angular解释器实现笔记本,我在段落之间的同步中遇到问题,我使用angularWatch运行段落 段落0导入必要的围嘴并配置笔记本以在变量selectedKey更改时运行段落

    %spark
    import com.mongodb.spark.MongoSpark
    import com.mongodb.spark.config.{ReadConfig, WriteConfig}
    import com.mongodb.spark.sql._
    import org.apache.spark.sql.functions.{asc, _}
    import org.bson.Document
    import scala.collection.JavaConverters._
    import scala.collection.mutable.ListBuffer
    z.angularBind("Choosedkey", "type")
    val selectedKeyontext = z.getInterpreterContext()
    z.angularWatch("Choosedkey", (before:Object, after:Object) => {
    z.run(List(2).asJava.asInstanceOf[java.util.List[Object]], 
    selectedKeyontext)
    z.run(List(3).asJava.asInstanceOf[java.util.List[Object]], 
    selectedKeyontext)
    z.run(List(4).asJava.asInstanceOf[java.util.List[Object]], selectedKeyontext)
    z.run(List(5).asJava.asInstanceOf[java.util.List[Object]], selectedKeyontext)
    })

parghraph 1:为用户文本区域编写查询配置

     println("""%angular  <h4> Please type the key</h4>
    Your key <input ng-model="gg" type="text"></input> <button class="btn btn- 
   success" ng-click="Choosedkey=gg" >Run !</button>

     """)

paraghraph 2负责将参数保存在MongoDB集合中,以便将此参数传递到mongodb解释器中,因为此解释器目前无法与spark和angular解释器交互...

   val s=z.angular("Choosedkey")
   var TR =new ListBuffer[String]()
   TR+= s.toString
   val document = sc.parallelize(
   Seq(new Document("faits",TR.asJava)))
   val writeConfig = WriteConfig(Map("uri" -> "mongodb://127.0.0.1:27017/", 
   "database" -> "test","collection" -> "Ckey")
   MongoSpark.save(document, writeConfig)

第3段:获取用户编写的参数,并在mongodb集合中使用该参数执行查询

    %mongodb
    q=String(db.Ckey.find({}, { faits: 1 , _id : 0} )[0].faits)
    db.Collection_key.insert(db.ColFTTH.find({"d.key":q}).toArray())
    db.Collection_key.aggregate([
    { "$unwind": "$c" },
    { "$group": {
    "_id": "$c.re",
    "count": { "$sum": 1 }
    }},
    { $out: "Key_T" }
    db.Collection_key.aggregate([
    { "$unwind": "$in" },
    { "$group": {
     "_id": "$in.r",
      "count": { "$sum": 1 }
     }},
    { $out: "Key_I" }
    ])

paraghraph 4:显示来自paraghraph 3的结果表

   %mongodb
   db.Key_T.find().sort({count:-1}).limit(10).table()

paraghraph 5:显示paraghraph 3中的表格

    %mongodb
    db.Key_I.find().sort({count:-1}).limit(10).table()

这里的问题是,当我选择一个键并提交运行时,所有段落都在同一时刻运行,并且每个段都会产生错误,因为第3段花费了5分钟,结果将用在其他段中,而且parghraph 3使用了错误的键,因为没有等待paraghraph 2的执行。请让我感到困惑!

0 个答案:

没有答案