簡體   English   中英

Scala Spark,如何為列添加值

[英]Scala Spark, how to add value to the column

我的目標是將可配置的常量值添加到DataFrame的給定列。

val df = Seq(("A", 1), ("B", 2), ("C", 3)).toDF("col1", "col2")

+----+----+
|col1|col2|
+----+----+
|   A|   1|
|   B|   2|
|   C|   3|
+----+----+

為此,我可以使用硬編碼定義UDF,如下所示:

val add100 = udf( (x: Int) => x + 100)
df.withColumn("col3", add100($"col2")).show()

+----+----+----+
|col1|col2|col3|
+----+----+----+
|   A|   1| 101|
|   B|   2| 102|
|   C|   3| 103|
+----+----+----+    

我的問題是,使數字(100以上)可配置的最佳方法是什么?

我嘗試了以下方式,似乎工作。 但我想知道是否還有其他更好的方法來實現相同的運營結果?

val addP = udf( (x: Int, p: Int) => x + p )
df.withColumn("col4", addP($"col2", lit(100)))

+----+----+----+
|col1|col2|col4|
+----+----+----+
|   A|   1| 101|
|   B|   2| 102|
|   C|   3| 103|
+----+----+----+

我們這里不需要udf:

df.withColumn("col3", df("col2") + 100).show
+----+----+----+
|col1|col2|col3|
+----+----+----+
|   A|   1| 101|
|   B|   2| 102|
|   C|   3| 103|
+----+----+----+

您可以定義一個curried函數 ,拉出額外的參數並返回一個僅將列作為參數的udf

val addP = (p: Int) => udf( (x: Int) => x + p ) 
// addP: Int => org.apache.spark.sql.expressions.UserDefinedFunction = <function1>

df.withColumn("col3", addP(100)($"col2")).show
+----+----+----+
|col1|col2|col3|
+----+----+----+
|   A|   1| 101|
|   B|   2| 102|
|   C|   3| 103|
+----+----+----+

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM