【问题标题】:How can I use REGEX_REPLACE in pyspark SQL to remove \n and \r from column如何在 pyspark SQL 中使用 REGEX_REPLACE 从列中删除 \\n 和 \\r
【发布时间】:2022-08-02 17:00:07
【问题描述】:

我正在尝试从 ScyllaDB 读取数据并希望从列中删除 \\n 和 \\r 字符。问题是这些字符作为字符串存储在正在读取的表的列中,我需要使用 REGEX_REPLACE,因为我正在为此使用 Spark SQL。正则表达式模式在 MySQL 中似乎不起作用。字符串变为空白,但不会删除字符。下面是 Spark SQL 中使用的查询的 sn-p。帮助表示赞赏。

消息列中存在以下字符串:\'hello\\nworld\\r\'

预期的输出是 \'hello world\'

df=spark.sql(\"select  REGEXP_REPLACE(message,\'\\n|\\r|\\r\\n\',\' \') as replaced_message from delivery_sms\")
  • 如果您实际上是在尝试替换字符串 \\n\\r,则需要转义斜杠 - regexp_replace(message, \'\\\\n|\\\\r, \' \')
  • @Andrew,它不适用于 pyspark sql,但它适用于 mysql 查询。您能否建议我可以应用的任何其他方式(另一个功能)会有所帮助
  • 我还提到了链接stackoverflow.com/questions/56371701/… 我尝试使用从 scyllaDB 读取的数据框,但它不适用于该数据框。但是当我尝试与链接中给出的相同示例时,它可以工作。如果可以请告诉我是什么原因
  • 嗯,这很奇怪。我也不能让它在 spark sql 中工作。不过,您可以在数据框上使用 regexp_replace 和 withColumn 来完成。您必须为每个使用 4 个斜杠 - df.withColumn(\"test\",regexp_replace(\"_c0\",\"\\\\\\\\n|\\\\\\\\r\",\" \")).show()

标签: pyspark apache-spark-sql scylla


【解决方案1】:

感谢安德鲁的回答。

以下对我有用:

df.withColumn("test",regexp_replace("_c0","\\\\n|\\\\r"," ")).show()

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2022-01-24
  • 2016-06-20
  • 2020-06-20
  • 2021-12-06
  • 1970-01-01
  • 2014-09-16
  • 2016-01-05
相关资源
最近更新 更多