【问题标题】:Escaping Characters in Spark.SQL() with Wildcard Inside of Query在查询中使用通配符在 Spark.SQL() 中转义字符
【发布时间】:2021-09-22 21:58:25
【问题描述】:

示例查询:

df = spark.sql("""
select distinct key,
      coalesce(get_json_object(col2,'$.value'), case when col2 like '%value\\u0022: false%' then 'false' when col2 like '%value\\u0022: true%' then 'true' end) as col2flag
from Table
""")

在 Impala 中存在一个有效载荷结构,其中 \u0022 用于所需的值。在 Impala SQL 中转义这个 unicode 字符是通过一个额外的 \ 斜线来完成的。

当通过 Pyspark 提取此 DF 时,从 case 语句提取的值在预期为 true 时为 null。我已经用一个正斜杠和两个斜杠尝试了上述查询。

【问题讨论】:

标签: pyspark impala


【解决方案1】:

尝试将spark.sql.parser.escapedStringLiterals 设置为'true',然后使用四个斜杠来解析字符串中的文字\。在此处查看此示例:

spark.sql("select * from df1").show(truncate=False)

+---+---------------------+
|id |str                  |
+---+---------------------+
|1  |value\x2 : true      |
|2  |test value\u2 : false|
|3  |val: true            |
+---+---------------------+

spark.conf.set("spark.sql.parser.escapedStringLiterals", "true")

spark.sql(" select * from df1 where str like '%value\\\\u%'  ").show(truncate=False)

+---+---------------------+
|id |str                  |
+---+---------------------+
|2  |test value\u2 : false|
+---+---------------------+

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-28
    • 1970-01-01
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多