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

Я хотел бы рассчитать разницу между двумя значениями из одного столбца. Сейчас мне просто нужна разница между последним значением и первым значением, однако использование последнего (столбца) возвращает нулевой результат. Есть ли причина, по которой 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.


person the3rdNotch    schedule 28.09.2015    source источник
comment
Я передаю нужный столбец функции, которая выполняет: last(col)-first(col), но возвращает null. first(col) возвращает соответствующее значение, а last(col) возвращает null.   -  person the3rdNotch    schedule 28.09.2015
comment
Думаю, я также хочу прояснить, что ни одно из значений в столбце не равно null, все они двойные.   -  person the3rdNotch    schedule 28.09.2015
comment
Пожалуйста, опубликуйте минимальный, полный и проверяемый пример.   -  person zero323    schedule 28.09.2015
comment
Добавлен код из той части, которая вызывает проблемы.   -  person the3rdNotch    schedule 28.09.2015


Ответы (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")
  )
}
person the3rdNotch    schedule 09.10.2015