输入不匹配“当” Pyspark时,但语句工作时其他情况

如何解决输入不匹配“当” Pyspark时,但语句工作时其他情况

当我在jupyter Pyspark环境中运行以下代码时:

max(case when 
lower(drugcode.standard.primaryDisplay) like '%onpattro%'
or lower(drugcode.standard.primaryDisplay) like '%patisiran%'
or (drugcode.standard.CodingSystemid ='2.16.840.1.113883.6.314'
and lower(drugcode.standard.id) in ('d08858'))
or (drugcode.standard.CodingSystemid ='2.16.840.1.113883.6.312'
and lower(drugcode.standard.id) in ('287393','287396','287397,'287399','308546'))
 or (drugcode.standard.CodingSystemid ='2.16.840.1.113883.6.69'
and lower(drugcode.standard.id) in ('71336100001'))
or (drugcode.standard.CodingSystemid ='2.16.840.1.113883.6.88'
and lower(drugcode.standard.id) in ('2053490','2053521','2053522','2053523','2053524','2053525','2053526','2053527','2053528','2053529','2053530','2053531','2284712','2284714'))
   or (drugcode.standard.CodingSystemid ='2.16.840.1.113883.6.96'
and lower(drugcode.standard.id) in ('37498111000001109','773605008','773608005')) then 1 else 0 end) as on_ind,

我收到以下错误:

    Py4JJavaError: An error occurred while calling o42.sql.
: org.apache.spark.sql.catalyst.parser.ParseException: 
mismatched input 'when' expecting {')',','}(line 10,pos 9)



 `== SQL ==

'select
tenant as med_tenant,personid as med_personid,medicationid as med_medicationid,encounterid as med_encounterid,drugcode.standard.codingSystemId as codingSystemId,drugcode.standard.id as drugCode,drugcode.standard.primaryDisplay as drugDesc,max(case when lower(drugcode.standard.primaryDisplay) like '%onpattro%'
---------^^^
    or lower(drugcode.standard.primaryDisplay) like '%patisiran%'
    or (drugcode.standard.CodingSystemid ='2.16.840.1.113883.6.314'
    and lower(drugcode.standard.id) in ('d08858'))
    or (drugcode.standard.CodingSystemid ='2.16.840.1.113883.6.312'
    and lower(drugcode.standard.id) in ('287393','308546'))
     or (drugcode.standard.CodingSystemid ='2.16.840.1.113883.6.69'
    and lower(drugcode.standard.id) in ('71336100001'))
    or (drugcode.standard.CodingSystemid ='2.16.840.1.113883.6.88'
    and lower(drugcode.standard.id) in ('2053490','2284714'))
       or (drugcode.standard.CodingSystemid ='2.16.840.1.113883.6.96'
    and lower(drugcode.standard.id) in ('37498111000001109',max(case when
    lower(drugcode.standard.primaryDisplay) like '%givlaari%'
    or lower(drugcode.standard.primaryDisplay) like '%givosiran%'
    or (drugcode.standard.CodingSystemid ='2.16.840.1.113883.6.314'
    and lower(drugcode.standard.id) in ('d09456')) then 1 else 0 end) as giv_ind
    
    
FROM medication
WHERE
    lower(status.standard.primaryDisplay) not in ('cancelled','canceled','error entry deleted')
    
GROUP BY
    tenant,personid,medicationid,encounterid,drugcode.standard.codingSystemId,drugcode.standard.id,drugcode.standard.primaryDisplay
    

    at org.apache.spark.sql.catalyst.parser.ParseException.withCommand(ParseDriver.scala:241)
    at org.apache.spark.sql.catalyst.parser.AbstractSqlParser.parse(ParseDriver.scala:117)
    at org.apache.spark.sql.execution.SparkSqlParser.parse(SparkSqlParser.scala:48)
    at org.apache.spark.sql.catalyst.parser.AbstractSqlParser.parsePlan(ParseDriver.scala:69)
    at org.apache.spark.sql.SparkSession.sql(SparkSession.scala:642)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244)
    at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)
    at py4j.Gateway.invoke(Gateway.java:282)
    at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)
    at py4j.commands.CallCommand.execute(CallCommand.java:79)
    at py4j.GatewayConnection.run(GatewayConnection.java:238)
    at java.lang.Thread.run(Thread.java:748)


During handling of the above exception,another exception occurred:

ParseException                            Traceback (most recent call last)
<ipython-input-14-8f5dff49e939> in <module>
     39     drugcode.standard.id,40     drugcode.standard.primaryDisplay
---> 41     """)

/usr/local/spark/python/pyspark/sql/session.py in sql(self,sqlQuery)
    765         [Row(f1=1,f2=u'row1'),Row(f1=2,f2=u'row2'),Row(f1=3,f2=u'row3')]
    766         """
--> 767         return DataFrame(self._jsparkSession.sql(sqlQuery),self._wrapped)
    768 
    769     @since(2.0)

/usr/local/spark/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py in __call__(self,*args)
   1255         answer = self.gateway_client.send_command(command)
   1256         return_value = get_return_value(
-> 1257             answer,self.gateway_client,self.target_id,self.name)
   1258 
   1259         for temp_arg in temp_args:

/usr/local/spark/python/pyspark/sql/utils.py in deco(*a,**kw)
     71                 raise AnalysisException(s.split(': ',1)[1],stackTrace)
     72             if s.startswith('org.apache.spark.sql.catalyst.parser.ParseException: '):
---> 73                 raise ParseException(s.split(': ',stackTrace)
     74             if s.startswith('org.apache.spark.sql.streaming.StreamingQueryException: '):
     75                 raise StreamingQueryException(s.split(': ',stackTrace)

ParseException: "\nmismatched input 'when' expecting {')',pos 9)\n\n== SQL ==\n\nselect\ntenant as med_tenant,\npersonid as med_personid,\nmedicationid as med_medicationid,\nencounterid as med_encounterid,\ndrugcode.standard.codingSystemId as codingSystemId,\ndrugcode.standard.id as drugCode,\ndrugcode.standard.primaryDisplay as drugDesc,\nmax(case when lower(drugcode.standard.primaryDisplay) like '%onpattro%'\n---------^^^\n    or lower(drugcode.standard.primaryDisplay) like '%patisiran%'\n    or (drugcode.standard.CodingSystemid ='2.16.840.1.113883.6.314'\n    and lower(drugcode.standard.id) in ('d08858'))\n    or (drugcode.standard.CodingSystemid ='2.16.840.1.113883.6.312'\n    and lower(drugcode.standard.id) in ('287393','308546'))\n     or (drugcode.standard.CodingSystemid ='2.16.840.1.113883.6.69'\n    and lower(drugcode.standard.id) in ('71336100001'))\n    or (drugcode.standard.CodingSystemid ='2.16.840.1.113883.6.88'\n    and lower(drugcode.standard.id) in ('2053490','2284714'))\n       or (drugcode.standard.CodingSystemid ='2.16.840.1.113883.6.96'\n    and lower(drugcode.standard.id) in ('37498111000001109',\nmax(case when\n    lower(drugcode.standard.primaryDisplay) like '%givlaari%'\n    or lower(drugcode.standard.primaryDisplay) like '%givosiran%'\n    or (drugcode.standard.CodingSystemid ='2.16.840.1.113883.6.314'\n    and lower(drugcode.standard.id) in ('d09456')) then 1 else 0 end) as giv_ind\n    \n    \nFROM medication\nWHERE\n    lower(status.standard.primaryDisplay) not in ('cancelled','error entry deleted')\n    \nGROUP BY\n    tenant,\n    personid,\n    medicationid,\n    encounterid,\n    drugcode.standard.codingSystemId,\n ` drugcode.standard.id,\n    drugcode.standard.primaryDisplay\n    \n"'

但是当我运行代码块时:

`max(case when
    lower(drugcode.standard.primaryDisplay) like '%givlaari%'
    or lower(drugcode.standard.primaryDisplay) like '%givosiran%'
    or (drugcode.standard.CodingSystemid ='2.16.840.1.113883.6.314'
    and lower(drugcode.standard.id) in ('d09456')) then 1 else 0 end) as giv_ind`

运行。这两个语句在语法上似乎与我相同,那么为什么第一个语句会出错?我试图以多种方式更改代码中各个元素的位置,但没有成功。即使删除case语句,也只会将错误的位置更改为“ lower”命令。

我对此表示感谢,因为它是我的主要阻碍。

解决方法

我认为在发布的代码中,您在 ' 上缺少一个引号'287397'尝试添加单引号并再次运行查询。

max(case when 
lower(drugcode.standard.primaryDisplay) like '%onpattro%'
or lower(drugcode.standard.primaryDisplay) like '%patisiran%'
or (drugcode.standard.CodingSystemid ='2.16.840.1.113883.6.314'
and lower(drugcode.standard.id) in ('d08858'))
or (drugcode.standard.CodingSystemid ='2.16.840.1.113883.6.312'
and lower(drugcode.standard.id) in ('287393','287396','287397','287399','308546'))
 or (drugcode.standard.CodingSystemid ='2.16.840.1.113883.6.69'
and lower(drugcode.standard.id) in ('71336100001'))
or (drugcode.standard.CodingSystemid ='2.16.840.1.113883.6.88'
and lower(drugcode.standard.id) in ('2053490','2053521','2053522','2053523','2053524','2053525','2053526','2053527','2053528','2053529','2053530','2053531','2284712','2284714'))
   or (drugcode.standard.CodingSystemid ='2.16.840.1.113883.6.96'
and lower(drugcode.standard.id) in ('37498111000001109','773605008','773608005')) then 1 else 0 end) as on_ind,
,

我建议您格式化表达式。

max(expr('''
    CASE WHEN 
            lower(drugcode.standard.primaryDisplay) like '%onpattro%' or
            lower(drugcode.standard.primaryDisplay) like '%patisiran%' or
            (
                drugcode.standard.CodingSystemid ='2.16.840.1.113883.6.314' and 
                lower(drugcode.standard.id) in ('d08858')
            ) or 
            (
                drugcode.standard.CodingSystemid ='2.16.840.1.113883.6.312' and 
                lower(drugcode.standard.id) in ('287393','308546')
            ) or 
            (
                drugcode.standard.CodingSystemid ='2.16.840.1.113883.6.69' and 
                lower(drugcode.standard.id) in ('71336100001')
            ) or 
            (
                drugcode.standard.CodingSystemid ='2.16.840.1.113883.6.88' and 
                lower(drugcode.standard.id) in ('2053490',' 2053524','2284714')
            ) or 
            (
                drugcode.standard.CodingSystemid ='2.16.840.1.113883.6.96' and 
                lower(drugcode.standard.id) in ('37498111000001109','773608005')
            ) 
        THEN 1 
        ELSE 0 
    END) as on_ind
'''))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-