Spark SQL中没有UDF的“地图部门”

时间:2018-11-09 13:40:28

标签: scala apache-spark apache-spark-sql

我们正在使用用户定义函数(UDF)对数据集中的两个MapType列执行“地图划分”。 “地图划分”的意思是创建一个新地图,该地图具有被除数和除数之间共有的键,以及被除数的值除以该键的除数的值。创建UDF的Scala代码如下所示。

def mapDivision(dividend: Map[String, Double], divisor: Map[String, Long]): Map[String, Double] = {
  var result = Map.empty[String, Double]
  for ((key, value) <- dividend) if (divisor.contains(key)) result += (key -> value / divisor(key))
  result
}

我们希望在不使用此UDF的情况下执行此操作,因为UDF无法通过Catalyst Engine进行优化,而且速度较慢。我们试图仅使用Spark SQL API来执行此操作,以实现比UDF更高的性能,但是一直没有想出一个好的方法来实现该目的,并且由于回旋连接而实际上并没有变慢等

有人知道使用Spark SQL API执行此操作的快速简便的方法吗?

0 个答案:

没有答案