【问题标题】:Using plotly with zeppellin in scala在 scala 中将 plotly 与 zeppellin 一起使用
【发布时间】:2016-11-14 08:35:44
【问题描述】:

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

【问题讨论】:

    标签: scala histogram plotly apache-zeppelin


    【解决方案1】:

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

    1. 在 Scala 窗口中将数据帧注册为临时表

    plotTemp.registerTempTable("plotTemp")

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

      %sql
      select degree, count(1) nInBin
      from plotTemp
      group by degree
      order by degree
      

    然后您可以单击条形图图标,您应该会看到要查找的内容

    Example of distribution plot done in Zeppelin

    【讨论】:

    • X 轴的比例在没有对应 X 值的地方被压缩。只需查看您自己的图表并比较 x 值 102 和 43828 的位置
    【解决方案2】:

    在尝试了几乎所有可用的解决方案后,我最终选择了vegas-viz。如果您查看他们在 GitHub 上的项目页面,他们声称是“The Missing MatPlotLib for Scala + Spark”。虽然这对我来说听起来有点夸张,但图书馆确实做到了它的工作并且做得很好。

    这是我建议在 Zeppelin 的 Spark Interpreter 中绘制条形图(基本上是直方图所需要的)的过程:

    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
      

      结果应该类似于下图:

    1. 如果您在依赖项中添加了 vegas-spark(参见第 1 点),您甚至可以直接从 DataFrame 中绘制图像,但您还需要额外的导入才能使其工作:

      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】:

      我刚刚发布了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()
      

      【讨论】:

      • 导入不起作用。也许留下关于如何将 highcharts 放入环境的评论。
      【解决方案4】:

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

      z.show(tmp)
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-18
        • 2018-08-29
        • 2022-10-18
        • 2015-12-18
        • 2010-10-30
        • 2017-10-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多