Jupyter Notebook (Scala, ядро - Apache Toree) с Vegas, график не показывает данные
Я использую Jupyter (kernal - Apache Torre) для аналитики с использованием Apache Spark/Scala. Для визуализации я пытаюсь использовать Vegas (github - https://github.com/vegas-viz/Vegas)
Когда я использую пример кода Vegas - без использования расширения Vegas Spark, он работает нормально (пожалуйста, смотрите скриншот прилагается)
Тем не менее, с DataFrames, он не показывает графики. (т.е. график не показывает данные)
Вот код -
%AddDeps org.vegas-viz vegas_2.11 0.3.11 --transitive
%AddDeps org.vegas-viz vegas-spark_2.11 0.3.11
import vegas._
import vegas.render.WindowRenderer._
import vegas.data.External._
import vegas.sparkExt._
val seq = Seq(("a", 16), ("b", 77), ("c", 45), ("d",101),("e", 132),("f", 166),("g", 51))
val df = seq.toDF("id", "value")
df.show()
+---+-----+
| id|value|
+---+-----+
| a| 16|
| b| 77|
| c| 45|
| d| 101|
| e| 132|
| f| 166|
| g| 51|
+---+-----+
val usingSparkdf = Vegas("UsingSpark")
.withDataFrame(df1)
.encodeX("id")
.encodeY("value")
.mark(Bar)
usingSparkdf.show
Что я здесь не так делаю?
Это правильный способ включить расширение Scala?
%AddDeps org.vegas-viz vegas-spark_2.11 0.3.11
1 ответ
Решение
Я смог решить эту проблему: для encodeX, encodeY должен быть указан (статистический) тип числа, то есть Quant, Nom или Ord, а также имя столбца.
Код ниже работает нормально.
val usingSparkdf = Vegas("UsingSpark")
.withDataFrame(df1)
.encodeX("id", Nom)
.encodeY("value", Quant)
.mark(Bar)
usingSparkdf.show
package al.da.vg
object vegas_spark extends App {
val conf = new SparkConf().setAppName("Vegas_Spark").setMaster("local[*]")
val sc = new SparkContext(conf)
val spark = SparkSession.builder().config(conf).appName("Vegas_Spark").getOrCreate()
val sqlContext = new SQLContext(sc)
import sqlContext.implicits._
spark.sparkContext.setLogLevel("WARN")
val seq1 = Seq(
Map("a" -> "A", "b" -> 28), Map("a" -> "B", "b" -> 55), Map("a" -> "C", "b" -> 43),
Map("a" -> "D", "b" -> 91), Map("a" -> "E", "b" -> 81), Map("a" -> "F", "b" -> 53),
Map("a" -> "G", "b" -> 19), Map("a" -> "H", "b" -> 87), Map("a" -> "I", "b" -> 52))
val df1 = seq1.toDF("a", "b")
df1.show()
val usingSparkdf1 = Vegas("Vegas_Spark")
.withDataFrame(df1)
.encodeX("a", Ordinal)
.encodeY("b", Quantitative)
.mark(Bar)
.show
}