Вложенный Spark DataFrame при вызове Vegas-viz .withDataFrame - PullRequest
0 голосов
/ 05 сентября 2018

Краткое резюме: Я пытаюсь отобразить несколько гистограмм из Spark DataFrames с Vegas-viz в Scala. Я создал trait для создания различных типов гистограмм и реализовал классы, расширяющие его. Когда я создаю экземпляр дочернего класса, я получаю NullPointerException, который заставляет меня думать, что где-то есть вложенный DataFrame.

Есть ли обходной путь? Я что-то пропустил, а ошибка - что-то еще?

Подробности: Вот это trait:

trait Histogram {

  val rawdf: DataFrame
  val sparseDim: Seq[String]
  val name: String

  val xColumn: String
  val yColumn: String

  val group: DataFrame

  val plot: ExtendedUnitSpecBuilder = Vegas(name).
    withDataFrame(group).
    encodeX(
      field = xColumn,
      Quantitative,
      scale = Scale(ScaleType.Log),
      title = sparseDim.reduce((a, b) => a + ", " + b)
    ).
    encodeY(field = yColumn, Quantitative).
    mark(Bar)

  def show(): Unit = plot.show

}

А вот один из классов, расширяющих его:

class HistogramCount(val rawdf: DataFrame,
                     val sparseDim: Seq[String],
                     val name: String = "Histogram Count") extends Histogram {

  val xColumn = "cube"
  val yColumn = "count"

  override val group: DataFrame = rawdf.
    select("VALUE", sparseDim: _*).
    groupBy(sparseDim.head, sparseDim.tail: _*).
    count().
    withColumnRenamed("count", "cube").
    groupBy("cube").
    count()

}

Когда я создаю экземпляр дочернего класса, возникает следующая ошибка:

Exception in thread "main" java.lang.NullPointerException
at <Pointing to .withDataFrame(group) in the trait>

Полагаю, это потому, что оценка group ленива и что она вызывается в .withDataFrame(group) при создании plot.

Я пытался оценить group DataFrame перед вызовом графика с помощью val evaluate: Long = group.rdd.count(), но это не решило проблему.

1 Ответ

0 голосов
/ 05 сентября 2018

Решил, сделав переменную plot ленивой. До сих пор не уверен, что это лучший способ мыслить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...