在spark scala中编写withcolumn的泛型函数

vngu2lb8  于 2021-05-27  发布在  Spark
关注(0)|答案(2)|浏览(438)

我正在使用below withcolumn条件创建一个新的dataframe df。我对其他dataframes也有相同的below withcolumn条件用法。如何将这些all withcolumn条件作为泛型函数写入并跨所有dataframes访问它。

val df = sampledf.withColumn("concat", concat($"columna", $"columnb", $"columnc"))
         .withColumn("sub", $"columna" -  $"columnb")
         .withColumn("div", $"columna" / $"columnb")
         .withColumn("mul", $"columna" * $"columnb")
z9zf31ra

z9zf31ra1#

这是一个可重用的函数:

def yourFunction()(df: DataFrame) = {
  df.withColumn("concat", concat($"columna", $"columnb", $"columnc"))
    .withColumn("sub", $"columna" -  $"columnb")
    .withColumn("div", $"columna" / $"columnb")
    .withColumn("mul", $"columna" * $"columnb")
}

下面是如何使用该函数:

val df = sampledf.transform(yourFunction())

有关使用spark链接Dataframe转换的更多信息,请参阅本文。编写干净的spark代码是非常重要的设计模式。

tf7tbtn2

tf7tbtn22#

使用 higher order functions .
检查以下代码。
定义公共函数。

scala> def func(
    f: (Column,Column) => Column, 
    cols:Column*
): Column = cols.reduce(f)

示例Dataframe

scala> df.show(false)
+-------+-------+-------+
|columna|columnb|columnc|
+-------+-------+-------+
|1      |2      |3      |
+-------+-------+-------+

创建表达式。

scala> val colExpr = Seq(
     |     $"columna",
     |     $"columnb",
     |     $"columnc",
     |     func(concat(_,_),$"columna",$"columnb",$"columnc").as("concat"),
     |     func((_ / _),$"columna",$"columnb").as("div"),
     |     func((_ * _),$"columna",$"columnb").as("mul"),
     |     func((_ + _),$"columna",$"columnb").as("add"),
     |     func((_ - _),$"columna",$"columnb").as("sub")
     | )

应用表达式。

scala> df.select(colExpr:_*).show(false)
+-------+-------+-------+------+---+---+---+---+
|columna|columnb|columnc|concat|div|mul|add|sub|
+-------+-------+-------+------+---+---+---+---+
|1      |2      |3      |123   |0.5|2  |3  |-1 |
+-------+-------+-------+------+---+---+---+---+

查看此帖子了解更多详细信息。

相关问题