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