【问题标题】:Spark SQL - convert string to ASCIISpark SQL - 将字符串转换为 ASCII
【发布时间】:2021-03-26 23:03:40
【问题描述】:

我们遇到了一个生产者将一些 Unicode 字符串推送到应该是 ASCII 的字段的问题。目前这项工作是纯 sql 可配置的,因此我想知道是否可以仅使用 Spark SQL 将 Unicode 字符串转换为 ASCII,类似于this 问题中给出的解决方案(当然这会导致不受支持的数据丢失字符,但这不是问题)。

【问题讨论】:

  • 如果非 ASCII 字符被传递,预期的结果是什么?你真的想让中文输入变成空吗?
  • 没有问题,但感谢您提出关注 :-)

标签: sql apache-spark apache-spark-sql ansi-sql


【解决方案1】:

试试encode:

SELECT encode(column, 'ascii') as column;

例如:

spark-sql> select encode('ÄÊÍABCDE', 'ascii');
???ABCDE

【讨论】:

    【解决方案2】:

    您可以使用 regexp_replace() 删除不需要的字符

    scala> spark.sql(""" SELECT regexp_replace(decode(encode('Ä??ABCDE', 'utf-8'), 'ascii'), "[^\t\n\r\x20-\x7F]","")  x """).show(false)
    +-----+
    |x    |
    +-----+
    |ABCDE|
    +-----+
    
    
    scala>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-16
      • 1970-01-01
      • 1970-01-01
      • 2018-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多