在我的 Scala 程式中,我有一個df包含兩列a和b(型別均為Int)的資料框。除此之外,我有一個先前定義的物件obj,其中包含一些方法和屬性。在這里,我想df使用資料框的當前值和來自obj.
例如,如果我有下面的資料框:
--- ---
| a | b |
--- ---
| 1 | 0 |
| 4 | 8 |
| 2 | 5 |
--- ---
如果obj有一個屬性num: Int = 10和一個方法f(a: Int, b: Int): Int = {a b - this.num},我想用它f來創建新列,c如下所示:
--- --- -----
| a | b | c |
--- --- -----
| 1 | 0 | -9 |
| 4 | 8 | 2 |
| 2 | 5 | -3 |
--- --- -----
這樣的想法是:對于每一行,采取列的值a,并b與呼叫該方法f的obj使用a,并b作為引數也得到我們那么新列的相應行中存盤的值c。我試圖做這樣的事情:
df = df.withColumn("c", obj.f(col("a"), col("b")))
但顯然它不能作為col()回傳列而不是該列的元素。我還在一個用 0 填充的新列上嘗試了 foreach 以逐行填充該列,但效果不佳。
你知道我如何在 Scala 中實作這一點嗎?
謝謝你。
uj5u.com熱心網友回復:
不用函式也能達到同樣的效果,性能會更好:
val num = 10
df.withColumn("c", col("a") col("b") - lit(num))
帶有 UDF 的版本:
val num = 10
val f = (a: Int, b: Int) => {a b - num}
val fUDF = udf(f)
df.withColumn("c", fUDF(col("a"), col("b")))
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/331193.html
上一篇:按組將Pandas資料框日期列拆分為start_date和end)date
下一篇:將字串分解為R中的多個虛擬變數
