che*_*der 3 regex hive apache-spark apache-spark-sql pyspark
我正在尝试使用 pyspark 包装器使用 SPARK-SQL实现此功能。我遇到了这个错误
pyspark.sql.utils.AnalysisException: u"cannot resolve '```(qtr)?+.+```'
given input columns:
Run Code Online (Sandbox Code Playgroud)
这是我的查询..基本上试图排除列“qtr”。
select `(qtr)?+.+` from project.table;
Run Code Online (Sandbox Code Playgroud)
使用以下属性在 hive/beeline 中完美运行
set hive.support.quoted.identifiers=none;
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏?
Spark 允许 RegEx 作为SELECT表达式中的列名。默认情况下,此行为被禁用。要启用它,我们需要true在使用 RegEx 列运行查询之前将以下属性设置为。
spark.sql("SET spark.sql.parser.quotedRegexColumnNames=true").show(false)
Run Code Online (Sandbox Code Playgroud)
设置此属性后,我们可以使用正则表达式选择表达式,如下所示。
spark.sql("SELECT `(.*time.*)+.+` FROM test.orders limit 2""").show(false)
Run Code Online (Sandbox Code Playgroud)
注意:这里允许任何 java 有效的 RegEx。我已经在 Spark 2.3 中测试了这个解决方案