Spark中的UDF被调用两次

时间:2017-07-25 16:05:37

标签: scala apache-spark apache-spark-sql spark-dataframe user-defined-functions

我遇到了两次调用UDF的问题。我尝试运行的第一个SQL命令是:

sqlContext.sql("SELECT * FROM ( SELECT city, CTOF(avgLow) AS Feren FROM citytemps ) AS x WHERE Feren > 30.0 ORDER BY Feren DESC").show();

其中CTOF是我的UDF。

我注意到CTOF在这里被调用了两次(我怀疑在WHERE子句中然后再在SELECT子句中)。我在我的CTOF函数中添加了print语句,看到任何高于30度的ferenheit计算,CTOF被调用两次。我宁愿只调用一次,因为我可以有一个非常大的数据帧。

在我没有运气的SQL命令后,我尝试了以下内容:

val ferenDF = sqlContext.sql("SELECT city, CTOF(avgLow) AS Feren FROM citytemps");
ferenDF.registerTempTable("ferenTemp");
sqlContext.sql("SELECT city, Feren from ferenTemp WHERE Feren > 30.0 ORDER BY Feren DESC").show();

我的UDF,CTOF,仍被调用两次。无论如何我可以运行这些SQL命令,以便CTOF只被称为ONCE吗? 仅供参考,我使用Spark 2.1.0。

0 个答案:

没有答案