Select 个数据框列中的值
Select values from a dataframe column
我想计算同一列中两个值之间的差异。现在我只想要最后一个值和第一个值之间的差异,但是使用 last(column) returns 一个空结果。有没有理由 last() 不会 returning 一个值?有没有办法将我想要的值的位置作为变量传递?例如: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)
它 return 是 null
结果。如果我将 difference
修改为只有 first(col)
,它会 return 四列的第一个值。但是,如果我将其更改为 last(col)
,它会 returns null
。如果我调用 myDF.show()
,我可以看到所有列的每一行都有 Double
值,任何列中都没有 null
值。
更新到 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")
)
}
我想计算同一列中两个值之间的差异。现在我只想要最后一个值和第一个值之间的差异,但是使用 last(column) returns 一个空结果。有没有理由 last() 不会 returning 一个值?有没有办法将我想要的值的位置作为变量传递?例如: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)
它 return 是 null
结果。如果我将 difference
修改为只有 first(col)
,它会 return 四列的第一个值。但是,如果我将其更改为 last(col)
,它会 returns null
。如果我调用 myDF.show()
,我可以看到所有列的每一行都有 Double
值,任何列中都没有 null
值。
更新到 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")
)
}