scala - org.apache.spark.sql.AnalysisException:在 SELECT 子句之外不支持生成器,但得到:'Agg
问题描述
我正在使用 spark sql 调用 UDF,但是在从 udf 的 DF 中选择列时,我遇到了错误。不知道真正的原因是什么。请问有什么解决办法吗?
SQL:
select parsedData.raw_data_arr.priority, parsedData.raw_data_arr.status, parsedData.raw_data_arr.correlationtype, parsedData.raw_data_arr.source, max(parsedData.raw_data_arr.starttime), parsedData.raw_data_arr.uniquerefrence, parsedData.raw_data_arr.creationtime, parsedData.raw_data_arr.incidentname, parsedData.raw_data_arr.impactedentitycount, parsedData.raw_data_arr.serviceaffected, parsedData.raw_data_arr.category, parsedData.raw_data_arr.locationtype, parsedData.raw_data_arr.locationname, parsedData.raw_data_arr.technology, parsedData.raw_data_arr.domain, parsedData.raw_data_arr.vendor, parsedData.raw_data_arr.causename, parsedData.raw_data_arr.causecode, parsedData.raw_data_arr.alarmid, parsedData.raw_data_arr.classification, parsedData.raw_data_arr.configjson, parsedData.raw_data_arr.impactedentityname from (select explode(ParseIncidentData(fileName)) as raw_data_arr from KafkaInput group by impactedentityname,causename,causecode) parsedData
==================================================== =======================
例外:
19-08-21 20:05:06:559 [INFO] com.inn.sparkrunner.processor.audit.ProcessorAudit Inside @method ProcessorAudit.exceptionLog for processor [Repartition Files] com.inn.sparkrunner.processor.audit.ProcessorAudit.exceptionLog(ProcessorAudit.java:234)
19-08-21 20:05:06:559 [INFO] com.inn.sparkrunner.processors.transformation.ExecuteSparkSQL [Repartition Files] ignoreNullDataset :[false] , error : org.apache.spark.sql.AnalysisException: Generators are not supported outside the SELECT clause, but got: 'Aggregate ['impactedentityname, 'causename, 'causecode], [explode(UDF:ParseIncidentData(fileName#15)) AS raw_data_arr#23];
at org.apache.spark.sql.catalyst.analysis.Analyzer$ExtractGenerator$$anonfun$apply$23.applyOrElse(Analyzer.scala:1649)
at org.apache.spark.sql.catalyst.analysis.Analyzer$ExtractGenerator$$anonfun$apply$23.applyOrElse(Analyzer.scala:1606)
at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$transformUp$1.apply(TreeNode.scala:289)
at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$transformUp$1.apply(TreeNode.scala:289)
at org.apache.spark.sql.catalyst.trees.CurrentOrigin$.withOrigin(TreeNode.scala:70)
at org.apache.spark.sql.catalyst.trees.TreeNode.transformUp(TreeNode.scala:288)
at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$3.apply(TreeNode.scala:286)
at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$3.apply(TreeNode.scala:286)
解决方案
推荐阅读
- c++ - 内部和外部成员函数定义的类的多重定义
- koa - 在全路由中间件 Koa-router 中获取映射路由参数
- javascript - 返回数组中的唯一值
- python - 如何根据Python中的第一个元素转换多数组?
- jquery - 需要检查一个输入,最多检查 4 个选项
- python-3.x - 这是 python 3.8 的 gensim hdp 模型上的错误吗?
- c# - 如何更改游戏中不断生成的对象的速度?
- node.js - 如何正确处理 try catch 块上的 child_process `close` 事件?
- ios - 具有返回值的快速函数是否必须使用“返回”关键字
- html - 如何调整容器内的表格高度和宽度并添加水平和垂直滚动条以避免溢出?