Spark Dataframe Arraytype列

时间:2018-03-24 17:08:33

标签: scala apache-spark spark-dataframe

我想在数据框上创建一个新列,这是将函数应用于arraytype列的结果。

这样的事情:

df = df.withColumn("max_$colname", max(col(colname)))

列的每一行都包含一个值数组?

spark.sql.function中的函数似乎只能以列为基础。

1 个答案:

答案 0 :(得分:1)

您可以在数组列上应用用户定义的函数。

1.DataFrame

+------------------+
|               arr|
+------------------+
|   [1, 2, 3, 4, 5]|
|[4, 5, 6, 7, 8, 9]|
+------------------+

2.创建UDF

import org.apache.spark.sql.functions._
def max(arr: TraversableOnce[Int])=arr.toList.max
val maxUDF=udf(max(_:Traversable[Int]))

3.在查询中应用UDF

df.withColumn("arrMax",maxUDF(df("arr"))).show

4.Result

+------------------+------+
|               arr|arrMax|
+------------------+------+
|   [1, 2, 3, 4, 5]|     5|
|[4, 5, 6, 7, 8, 9]|     9|
+------------------+------+