Spark抛出AnalysisException:未定义函数:spark内置函数的“计数”

时间:2019-03-27 08:32:08

标签: apache-spark livy

如果我在spark(2.3.2.0-mapr-1901)中运行以下代码,则在第一次运行时运行良好。

SELECT   count( `cpu-usage` ) as `cpu-usage-count` ,  sum( `cpu-usage` ) as `cpu-usage-sum` ,  percentile_approx( `cpu-usage`, 0.95 ) as `cpu-usage-approxPercentile` 
    FROM  filtered_set

filtered_set是已使用createOrReplaceTempView注册为临时视图的DataFrame。

我得到一个结果,并且在第一次通话中一切都很好。但是...

如果我随后再次运行此作业,(请注意,这是一个共享的Spark上下文,通过apache livy管理),Spark会抛出:

Wrapped by: java.util.concurrent.ExecutionException: java.lang.RuntimeException: org.apache.spark.sql.AnalysisException: Undefined function: 'count'. This function is neither a registered temporary function nor a permanent function registered in the database 'default'.; line 2 pos 10
org.apache.spark.sql.catalyst.analysis.Analyzer$LookupFunctions$$anonfun$apply$15$$anonfun$applyOrElse$50.apply(Analyzer.scala:1216)
org.apache.spark.sql.catalyst.analysis.Analyzer$LookupFunctions$$anonfun$apply$15$$anonfun$applyOrElse$50.apply(Analyzer.scala:1216)
org.apache.spark.sql.catalyst.analysis.package$.withPosition(package.scala:53)
org.apache.spark.sql.catalyst.analysis.Analyzer$LookupFunctions$$anonfun$apply$15.applyOrElse(Analyzer.scala:1215)
org.apache.spark.sql.catalyst.analysis.Analyzer$LookupFunctions$$anonfun$apply$15.applyOrElse(Analyzer.scala:1213)
org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$2.apply(TreeNode.scala:267)

...

org.apache.spark.sql.execution.QueryExecution.analyzed(QueryExecution.scala:55)
org.apache.spark.sql.execution.QueryExecution.assertAnalyzed(QueryExecution.scala:47)
org.apache.spark.sql.Dataset$.ofRows(Dataset.scala:74)
org.apache.spark.sql.SparkSession.sql(SparkSession.scala:642)
org.apache.spark.sql.SQLContext.sql(SQLContext.scala:694)

该问题在Livy作业的第二次运行中发生(正在使用上一个Spark会话)。它不仅仅与count函数隔离((等也与sum发生),并且任何函数在第二次运行时似乎都会失败,无论在第一次运行中调用了什么。

似乎Spark的功能注册表已被清除(包括默认的内置函数)。我们对spark上下文不做任何事情。

问题: -这是火花的预期行为还是正常行为? -如何重新设置或初始化spark会话,以免丢失所有这些功能?

我看到Undefined function错误是在其他地方根据用户定义的功能描述的,但从未显示过内置错误。

0 个答案:

没有答案