Выберите значения из столбца данных

Я хотел бы рассчитать разницу между двумя значениями из одного столбца. Прямо сейчас я просто хочу разницу между последним значением и первым значением, однако использование last(столбец) возвращает нулевой результат. Есть ли причина, по которой last() не будет возвращать значение? Есть ли способ передать положение значений, которые я хочу, в качестве переменных; например: 10-й и 1-й или 7-й и 6-й?

Current codeИспользование Spark 1.4.0 и Scala 2.11.6

myDF = некоторый фрейм данных с n строками по m столбцов

def difference(col: Column): Column = { last(col)-first(col) }

def diffCalcs(dataFrame: DataFrame): DataFrame = { import hiveContext.implicits._ dataFrame.agg( difference($"Column1"), difference($"Column2"), difference($"Column3"), difference($"Column4") ) }

Когда я бегу diffCalcs(myDF) это возвращает null результат. Если я изменю difference иметь только first(col), он возвращает первое значение для четырех столбцов. Однако, если я изменю это на last(col), это возвращает null, Если я позвоню myDF.show()Я вижу, что все столбцы имеют Double значений в каждой строке нет null значения в любом из столбцов.

1 ответ

Решение

После обновления до Spark 1.5.0 я смог использовать фрагмент кода, представленный в вопросе, и он заработал. Это было то, что в конечном счете исправило это. Просто для полноты я включил код, который использовал после обновления версии Spark.

def difference(col:Column): Column = {
  last(col)-first(col)
}

def diffCalcs(dataFrame: DataFrame): DataFrame = {
  import hiveContext.implicits._
  dataFrame.agg(
    difference($"Column1").alias("newColumn1"),
    difference($"Column2").alias("newColumn2"),
    difference($"Column3").alias("newColumn3"),
    difference($"Column4").alias("newColumn4")
  )
}
Другие вопросы по тегам