2015-09-28 3 views
0

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

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

myDF = некоторые dataframe с п строками т столбцами

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.

+0

Передаю колонку Я хочу функцию, которая выполняет: 'last (col) -first (col)', но возвращает 'null'. 'First (col)' возвращает соответствующий, но 'last (col)' возвращает 'null'. – the3rdNotch

+0

Я думаю, я также хочу пояснить, что ни одно из значений в столбце не является «null», они все являются двойными. – the3rdNotch

+1

Пожалуйста, напишите [минимальный, полный и проверяемый пример] (http://stackoverflow.com/help/mcve). – zero323

ответ

0

После обновления до 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") 
) 
} 
Смежные вопросы