火花 SQL - org.apache.spark.sql.AnalysisException
Spark SQL - org.apache.spark.sql.AnalysisException
当我 运行 第二次在 Databricks 上进行 Spark 作业时(第一次较少),会出现下面描述的错误。
sql 查询仅执行 create table as select from
来自 DataFrame 的注册临时视图。
第一个想法是 spark.catalog.clearCache()
在工作结束时(没有帮助)。
我还在 databricks 论坛上发现了一些关于使用 object ... extends App
(Scala) 而不是 main 方法的 post (再次没有帮助)
P.S。 current_date()
是内置函数,应该会自动提供(预期)
Spark 2.4.4、Scala 2.11、Databricks 运行时 6.2
org.apache.spark.sql.AnalysisException: Undefined function: 'current_date'. This function is neither a registered temporary function nor a permanent function registered in the database 'default'.; line 21 pos 4
at org.apache.spark.sql.catalyst.analysis.Analyzer$LookupFunctions$$anonfun$apply$$anonfun$applyOrElse.apply(Analyzer.scala:1318)
at org.apache.spark.sql.catalyst.analysis.Analyzer$LookupFunctions$$anonfun$apply$$anonfun$applyOrElse.apply(Analyzer.scala:1318)
at org.apache.spark.sql.catalyst.analysis.package$.withPosition(package.scala:53)
at org.apache.spark.sql.catalyst.analysis.Analyzer$LookupFunctions$$anonfun$apply.applyOrElse(Analyzer.scala:1317)
at org.apache.spark.sql.catalyst.analysis.Analyzer$LookupFunctions$$anonfun$apply.applyOrElse(Analyzer.scala:1309)
at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun.apply(TreeNode.scala:279)
at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun.apply(TreeNode.scala:279)
at org.apache.spark.sql.catalyst.trees.CurrentOrigin$.withOrigin(TreeNode.scala:76)```
current_date() is the built-in function and it should be provided
automatically (expected)
这个预期是错误的。你必须导入函数
对于 scala
import org.apache.spark.sql.functions._
其中 current_date 功能可用。
from pyspark.sql import functions as F
对于 pyspark
解决方案,确保每次执行作业时都初始化spark。
TL;DR,
我有类似的问题,对象扩展应用程序解决方案为我指明了正确的方向。所以,在我的例子中,我在“main”之外但在对象内创建了 spark 会话,当作业第一次执行时 cluster/driver 加载 jar 并初始化 spark 变量,一旦作业成功完成(第一次)执行 jar将其保存在内存中,但由于某种原因,link 到 spark 丢失,并且任何后续执行都不会重新初始化 spark,因为 jar 已经加载,在我的情况下,spark 初始化在 main 之外,因此不是 re-initilised。我认为这对于创建集群和 运行 或在执行前启动集群的 Databricks 作业来说不是问题(因为这些类似于首次启动案例)并且仅与已经启动和 运行ning 的集群相关jar 在集群启动或作业执行期间加载。
因此,我将 spark 创建,即 SparkSession.builder()...getOrCreate() 移动到“main”,因此当调用作业时,spark 会话会重新初始化。
当我 运行 第二次在 Databricks 上进行 Spark 作业时(第一次较少),会出现下面描述的错误。
sql 查询仅执行 create table as select from
来自 DataFrame 的注册临时视图。
第一个想法是 spark.catalog.clearCache()
在工作结束时(没有帮助)。
我还在 databricks 论坛上发现了一些关于使用 object ... extends App
(Scala) 而不是 main 方法的 post (再次没有帮助)
P.S。 current_date()
是内置函数,应该会自动提供(预期)
Spark 2.4.4、Scala 2.11、Databricks 运行时 6.2
org.apache.spark.sql.AnalysisException: Undefined function: 'current_date'. This function is neither a registered temporary function nor a permanent function registered in the database 'default'.; line 21 pos 4
at org.apache.spark.sql.catalyst.analysis.Analyzer$LookupFunctions$$anonfun$apply$$anonfun$applyOrElse.apply(Analyzer.scala:1318)
at org.apache.spark.sql.catalyst.analysis.Analyzer$LookupFunctions$$anonfun$apply$$anonfun$applyOrElse.apply(Analyzer.scala:1318)
at org.apache.spark.sql.catalyst.analysis.package$.withPosition(package.scala:53)
at org.apache.spark.sql.catalyst.analysis.Analyzer$LookupFunctions$$anonfun$apply.applyOrElse(Analyzer.scala:1317)
at org.apache.spark.sql.catalyst.analysis.Analyzer$LookupFunctions$$anonfun$apply.applyOrElse(Analyzer.scala:1309)
at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun.apply(TreeNode.scala:279)
at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun.apply(TreeNode.scala:279)
at org.apache.spark.sql.catalyst.trees.CurrentOrigin$.withOrigin(TreeNode.scala:76)```
current_date() is the built-in function and it should be provided automatically (expected)
这个预期是错误的。你必须导入函数
对于 scala
import org.apache.spark.sql.functions._
其中 current_date 功能可用。
from pyspark.sql import functions as F
对于 pyspark
解决方案,确保每次执行作业时都初始化spark。
TL;DR, 我有类似的问题,对象扩展应用程序解决方案为我指明了正确的方向。所以,在我的例子中,我在“main”之外但在对象内创建了 spark 会话,当作业第一次执行时 cluster/driver 加载 jar 并初始化 spark 变量,一旦作业成功完成(第一次)执行 jar将其保存在内存中,但由于某种原因,link 到 spark 丢失,并且任何后续执行都不会重新初始化 spark,因为 jar 已经加载,在我的情况下,spark 初始化在 main 之外,因此不是 re-initilised。我认为这对于创建集群和 运行 或在执行前启动集群的 Databricks 作业来说不是问题(因为这些类似于首次启动案例)并且仅与已经启动和 运行ning 的集群相关jar 在集群启动或作业执行期间加载。 因此,我将 spark 创建,即 SparkSession.builder()...getOrCreate() 移动到“main”,因此当调用作业时,spark 会话会重新初始化。