Эффективная гистограмма на нескольких столбцах в одном кадре - PullRequest
0 голосов
/ 31 декабря 2018

Вот как я вычисляю гистограмму по одному столбцу:

val df = spark.read.format("csv").option("header", "true").load("/project/test.csv")
df.map(row => row.getString(2).toDouble).rdd.histogram(10)

Я хочу вычислить гистограмму по всем столбцам.Я могу просто повторить вторую строку (см. Код выше) и вызвать гистограмму отдельно для каждого столбца.Но меня беспокоит то, что Spark будет загружать данные с диска каждый раз, когда я вызываю гистограмму (), что означает, что если имеется 10 столбцов, данные загружаются 10 раз.Есть ли более эффективный способ сделать это?Как вычислить гистограммы для всех 10 столбцов за один снимок?

Правка

Вот один из способов объединения нескольких вызовов гистограммы () в одно выражение:

val histograms = {
  val a = df.map(row => row.getString(0).toDouble).rdd.histogram(10)
  val b = df.map(row => row.getString(1).toDouble).rdd.histogram(15)
  (a, b)
}

Гарантирует ли это, что гистограммы будут вычисляться только с одним проходом данных?Объединение нескольких вызовов гистограммы в одно выражение - хитрость?Или это даже необходимо?Разве Spark не задерживает оценку, пока результат не будет использован в любом случае, даже если используются отдельные операторы?

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