PySpark中SQL参数化执行报ParseException错误求助解析
问题原因解析
嘿,这个错误其实是个典型的SQL语法小失误!你看错误栈里的核心提示:
mismatched input '.' expecting (line 1, pos 44)
对应生成的SQL语句是这样的:
select count(*) as RC_COUNT, from my_db.test_table where sys_rec = 'remote' and year=2019 and month=10
注意到RC_COUNT后面多了个多余的逗号(,)没?这个逗号直接破坏了SQL的语法结构——Spark SQL解析器看到这个逗号后,会期待后面跟着另一个字段,但紧接着的却是from关键字和表名my_db.test_table,它完全无法理解这种逻辑,所以抛出了这个解析异常。
修正后的代码
把那个多余的逗号删掉就搞定了:
db_name = 'my_db' process_year = '2019' process_month = '10' df_rc_dp = spark.sql("""select count(*) as RC_COUNT from {0}.test_table where sys_rec = 'remote' and year={1} and month={2}""".format(db_name, process_year, process_month))
顺便提个小建议:如果你的year和month字段是字符串类型,记得给参数套上单引号,避免潜在的类型不匹配问题,比如:
df_rc_dp = spark.sql("""select count(*) as RC_COUNT from {0}.test_table where sys_rec = 'remote' and year='{1}' and month='{2}'""".format(db_name, process_year, process_month))
内容的提问来源于stack exchange,提问作者S M
相关产品推荐
相关产品推荐

