为何在EMR环境运行Spark SQL时不支持原始字符串?
PySpark SQL原始字符串在本地与EMR环境的兼容性问题
在PySpark中使用regexp_extract或regexp_replace等Spark SQL函数时,带r前缀的原始字符串字面量在本地环境能正常运行,但部署到EMR集群执行时却不被支持。
复现代码
from pyspark.sql import SparkSession spark = SparkSession\ .builder\ .appName("test")\ .getOrCreate() spark.sql(r"select regexp_replace(r'ABC\123XYZ\456',r'[\\][\d][\d][\d]','') as new_value").show()
报错信息
pyspark.sql.utils.ParseException:
Literals of type 'R' are currently not supported
环境与排查情况
- 本地环境:PySpark 3.3.0,代码可成功执行
- EMR环境:执行上述代码会抛出上面的解析异常
- 已检查Spark SQL会话配置选项,未发现可修改原始字符串解析方式的配置,最接近的是
spark.sql.parser.quotedRegexColumnNames - 曾听闻同事提及AWS为EMR定制了内部Spark版本,但未找到相关官方文档佐证;也怀疑存在未被发现的Spark配置项
问题诉求
希望了解本地与EMR环境出现这种差异的具体原因。
内容的提问来源于stack exchange,提问作者danielcahall
相关产品推荐
相关产品推荐

