Если я запускаю следующий код в 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
- это DataFrame, который был зарегистрирован как временное представление с использованием createOrReplaceTempView
.
Я получаю результат, и все хорошо на первом звонке. Но ...
Если я затем снова запускаю это задание (обратите внимание, что это общий контекст искры, управляемый через 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). Он не изолирован только функцией подсчета (и т. Д. Также происходит с суммой и т. Д.), И любая функция, по-видимому, дает сбой при втором запуске, независимо от того, что было вызвано при первом запуске.
Кажется, что реестр функций Spark очищается (включая встроенные функции по умолчанию). Мы ничего не делаем с контекстом искры.
Вопросы:
- Это ожидаемое или нормальное поведение с искрой?
- Как бы я переустановил или инициализировал сеанс зажигания, чтобы он не потерял все эти функции?
Я видел Undefined function
ошибок, описанных в других местах в терминах пользовательских функций, но никогда не встроенных модулей.