在scala中使用zeppellin绘图

时间:2016-07-12 08:02:55

标签: scala histogram plotly apache-zeppelin

我想在Zeppelin中以直方图的形式显示我的结果。我偶然发现了。我的代码是scala,我想知道使用scala将情节合并到zeppelin中的步骤。或者有没有更好的方法(库)可用于在Zeppelin(Scala)中绘制直方图?

4 个答案:

答案 0 :(得分:2)

如果您有一个名为plotTemp的数据框,其列为“id”,“degree”,那么您可以执行以下操作:

  1. 在scala窗口中将数据框注册为临时表
  2. activeParent.children[ 1 ].innerHTML = editedContent

    1. 然后在新窗口中切换到SQL解释器

      plotTemp.registerTempTable("plotTemp")
    2. 然后,您可以点击条形图图标,您应该看到您要找的内容

      Example of distribution plot done in Zeppelin

答案 1 :(得分:0)

我刚刚发布了spark-highcharts。使用以下代码,您可以创建直方图。

import com.knockdata.spark.highcharts._
import com.knockdata.spark.highcharts.model._
highcharts(bank
    .series("x" -> "age", "y" -> count("*"))
    .orderBy(col("age"))
  )
  .chart(Chart.column)
  .plotOptions(new plotOptions.Column().groupPadding(0).pointPadding(0).borderWidth(0))
  .plot()

enter image description here

答案 2 :(得分:0)

尝试了所有可用的解决方案后,我最终选择了vegas-viz。如果您在GitHub上查看他们的项目页面,他们就会声称是“ Scala + Spark缺少的MatPlotLib ”。尽管此刻听起来有点夸张,但图书馆的工作做得很好。

这是我建议在Zeppelin的Spark解释器中绘制条形图(基本上就是直方图所需的过程)的步骤:

  1. 导入依赖项(请检查vegas maven repository以获取最新版本)

    %dep  
    z.load("org.vegas-viz:vegas_2.11:0.3.11")
    z.load("org.vegas-viz:vegas-spark_2.11:0.3.11")
    

请注意,仅当您要直接从DataFrame绘制时,才需要vegas-spark。

  1. 导入程序包

    import vegas._  
    import vegas.render.WindowRenderer._
    
  2. 绘制图表

    val plot = Vegas("Sample Column Chart")
      .withData(
        Seq(
          Map("country" -> "USA", "population" -> 314),
          Map("country" -> "UK", "population" -> 64),
          Map("country" -> "DK", "population" -> 80)
        )
      )
      .encodeX("country", Nom)
      .encodeY("population", Quant)
      .mark(Bar)
    plot.show
    

    结果应类似于下图:

enter image description here

  1. 如果您已经在依赖项之间添加了vegas-spark(请参见第1点),则甚至可以直接从DataFrame绘制图像(但请参见第1点)。

    import vegas.sparkExt._
    
    val df = Seq(
      ("USA", 314),
      ("UK", 64),
      ("DK", 80)
    ).toDF("country", "population")
    
    val plot = Vegas("Sample Column Chart", width=600, height=320)
      .withDataFrame(df)
      .encodeX("country", Nom)
      .encodeY("population", Quant)
      .mark(Bar)
    plot.show
    

结果应与上面相同。

答案 3 :(得分:0)

除了前面的答案外,如果您有一个名为tmp的数据框,则可以运行以下内容

z.show(tmp)

这将产生以下内容,您可以通过单击左上角的按钮来更改图形

enter image description here