【问题标题】:Spark Dataframe Arraytype columnsSpark Dataframe Arraytype 列
【发布时间】:2018-03-25 04:19:07
【问题描述】:

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

类似这样的:

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

列的每一行在哪里保存一个值数组?

spark.sql.function 中的函数似乎只能在列基础上工作。

【问题讨论】:

  • 你要应用什么样的功能?
  • 任何标准汇总统计:最小值、最大值、计数、平均值、方差等

标签: scala apache-spark spark-dataframe


【解决方案1】:

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

1.数据帧

+------------------+
|               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.结果

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

【讨论】:

  • 我写了代码来从数组中找到最大值。类似的方式,您可以编写逻辑来对数组进行任何操作。
猜你喜欢
  • 2018-11-07
  • 1970-01-01
  • 2021-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-13
  • 1970-01-01
  • 2021-12-06
相关资源
最近更新 更多