是否有更好的界面来为Zeppelin添加Highcharts支持

时间:2016-07-22 15:36:11

标签: apache-spark highcharts apache-zeppelin

Apache ZeppelinAngularJS有很好的支持。虽然Scala和Javascript之间存在差距。

我正在尝试向Zeppelin添加Highcharts支持以填补这一空白。主要目标是直接从Spark DataFrame绘制它。

经过几轮重构,我想出了以下界面。

github.com/knockdata/zeppelin-highcharts

以下是两个选项。 哪个选项更好?

选项A

这是绘制高级图表的示例。

highcharts(bank,
  "marital",
  List("name" -> "age", "y" -> avg(col("balance")), "orderBy" -> col("age")),
  new Title("Marital Job Average Balance").x(-20),
  new Subtitle("Source: Zeppelin Tutorial").x(-20),
  new XAxis("Age").typ("category"),
  new YAxis("Balance(¥)").plotLines(Map("value"->0, "width"->1)),
  new Tooltip().valueSuffix("¥"),
  new Legend().layout("vertical").align("right").verticalAlign("middle")
)

这是没有额外选项的代码。

highcharts(bank,
           "marital",
           List("name" -> "age", 
           "y" -> avg(col("balance")), 
           "orderBy" -> col("age")))

选项B

我通过@ honnix的回答激发了这个选项。它有更多的语法糖。

highcharts(bank).series("marital")
  .data("name" -> "age", "y" -> avg(col("balance")))
  .orderBy(col("age"))
  .title(Title("Marital Job Average Balance").x(-20))
  .subtitle(Subtitle("Source: Zeppelin Tutorial").x(-20))
  .xAxis(XAxis("Age").typ("category"))
  .yAxis(YAxis("Balance(¥)").plotLines("value"->0, "width"->1))
  .tooltip(Tooltip().valueSuffix("¥"))
  .legend(Legend().layout("vertical").align("right").verticalAlign("middle"))
  .plot

没有选项的简单图表将是

highcharts(bank).series("marital")
  .data("name" -> "age", "y" -> avg(col("balance")))
  .orderBy(col("age"))
  .plot

这将生成一个图表。

Marital Job Average Balance

1 个答案:

答案 0 :(得分:1)

使用某种链接方法传递这些参数会很好,因为在一个apply()方法中将几个列表放在一起有点难以阅读。