2016-02-23 94 views
0

有了一個火花數據框,比如說我有一個double或int類型的列,我想對它應用一個標量操作。如果操作是可交換的(如加)這很好,我可以做到以下幾點:如何在Spark數據框上執行非交換標量到矢量操作?

df.withColumn("RESULT", df("col") + 10) 

但是如果操作是不可交換的(如部門)?

這會工作

df.withColumn("RESULT", df("col")/10) 

但這不起作用(錯誤類型不匹配)

df.withColumn("RESULT", 10/df("col")) 

提供了原始的SQL語句會的工作,但你必須處理維護選擇的前面幾列:

df.select("10/col") 

您也可以將標量值注入df,但t如果你不得不放棄它。

有沒有更簡單的方法來做到這一點?

回答

3

是的。只需使用SQL文本:

import org.apache.spark.sql.functions.lit 

df.withColumn("RESULT", lit(10)/df("col")) 

您還可以使用selectExpr

df.selectExpr("*", "10/col as result") 

expr

import org.apache.spark.sql.functions.expr 

df.withColumn("RESULT", expr("10/col")) 
+0

完美,謝謝。 – joecoder

+0

selectExpr(「*」)的問題是我想要替換列,而不是重複它,lit是我正在尋找的東西。 – joecoder