2015-09-28 93 views
0

我想計算同一列內兩個值之間的差異。現在我只想要最後一個值和第一個值之間的差異,但是使用last(column)會返回空值結果。 last()不會返回一個值嗎?有沒有辦法將我想要的值的位置作爲變量傳遞;例如:10日和1日,或7日和6日?從數據框列中選擇值

Current code 使用火花1.4.0和Scala 2.11.6

myDF =由m列一些數據幀具有n行

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'。 '第一個(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") 
) 
} 
相關問題