【问题标题】:Select values from a dataframe column从数据框列中选择值
【发布时间】:2015-12-25 22:55:02
【问题描述】:

我想计算同一列中两个值之间的差异。现在我只想要最后一个值和第一个值之间的差异,但是使用 last(column) 返回一个空结果。 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 值。

【问题讨论】:

  • 我将我想要的列传递给一个函数:last(col)-first(col),但它返回一个nullfirst(col) 返回适当的值,但 last(col) 返回 null
  • 我想我也想明确一下,列中的值都不是null,它们都是双精度值。
  • 从出现问题的部分添加了代码。

标签: scala apache-spark apache-spark-sql apache-spark-1.4


【解决方案1】:

更新到 Spark 1.5.0 后,我能够使用问题中提供的代码 sn-p 并且它有效。这就是最终解决它的原因。为了完整起见,我已经包含了我在更新 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")
  )
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-05
    相关资源
    最近更新 更多