【发布时间】:2016-11-14 08:35:44
【问题描述】:
我想在 Zeppelin 中以直方图的形式显示我的结果。我偶然发现。我的代码在 scala 中,我想知道使用 scala 将情节整合到 zeppelin 中的步骤。或者有没有更好的方法(库)可以用来在 Zeppelin(Scala) 中绘制直方图?
【问题讨论】:
标签: scala histogram plotly apache-zeppelin
我想在 Zeppelin 中以直方图的形式显示我的结果。我偶然发现。我的代码在 scala 中,我想知道使用 scala 将情节整合到 zeppelin 中的步骤。或者有没有更好的方法(库)可以用来在 Zeppelin(Scala) 中绘制直方图?
【问题讨论】:
标签: scala histogram plotly apache-zeppelin
如果您有一个名为 plotTemp 的数据框,其中包含“id”、“degree”列,那么您可以执行以下操作:
plotTemp.registerTempTable("plotTemp")
然后在新窗口中切换到SQL解释器
%sql
select degree, count(1) nInBin
from plotTemp
group by degree
order by degree
然后您可以单击条形图图标,您应该会看到要查找的内容
【讨论】:
在尝试了几乎所有可用的解决方案后,我最终选择了vegas-viz。如果您查看他们在 GitHub 上的项目页面,他们声称是“The Missing MatPlotLib for Scala + Spark”。虽然这对我来说听起来有点夸张,但图书馆确实做到了它的工作并且做得很好。
这是我建议在 Zeppelin 的 Spark Interpreter 中绘制条形图(基本上是直方图所需要的)的过程:
导入依赖项(最新版本请查看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,请参见下文。
导入包
import vegas._
import vegas.render.WindowRenderer._
绘制图表
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
结果应该类似于下图:
如果您在依赖项中添加了 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
结果应该和上面一样。
【讨论】:
我刚刚发布了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()
【讨论】: