如何在Databricks上的纯sql中将字符串拆分为相等长度的字符串数组

问题描述 投票:0回答:1

我在表中有一个列,其中包含可变长度的字符串:

|value        |
|-------------|
|abcdefgh     |
|1234567891011|

我需要将字符串拆分为字符串数组,其中每个字符串的长度为 2(如果字符数为奇数,则最后一个字符串除外)。像这样:

|value        |split_value                |
|-------------|---------------------------|
|abcdefgh     |[ab, cd, ef, gh, ]         |
|1234567891011|[12, 34, 56, 78, 91, 01, 1]|

这适用于 pyspark:

# Sample data
data = [("abcdefgh",), ("1234567891011",)]
df = spark.createDataFrame(data, ["value"])
# Register the DataFrame as a temporary view
df.createOrReplaceTempView("strings")
# Use Spark SQL to add a delimiter every 2 characters and then split the string
result = spark.sql("""
SELECT 
    value,
    split(regexp_replace(value, '(.{2})', '$1,'), ',') AS split_value
FROM strings
""")
# Show the result
result.show(truncate=False)

...如预期给出了上面的结果表。

但是,当我在 Databricks 笔记本中的 sql 单元中执行完全相同的 sql 语句时,我得到一个空字符串数组:

%sql
SELECT 
    value,
    split(regexp_replace(value, '(.{2})', '$1,'), ',') AS split_value
FROM strings

|value        |split_value                 |
|-------------|----------------------------|
|abcdefgh     |["", "", "", "", ]          |
|1234567891011|["", "", "", "", "", "", ""]|

它还给了我这个警告: enter image description here

如何在Databricks上的sql中达到预期的结果?

sql arrays regex pyspark databricks
1个回答
0
投票

添加我的评论作为答案。我很少使用 regexp_replace 但这似乎有效。对于此处缺乏更多信息,我们深表歉意。

在 SQL 版本中尝试更改此设置:

regexp_replace(value, '(.{2})', '$1,') 

对此:

regexp_replace(value, '(.{2})', '$\1,')
© www.soinside.com 2019 - 2024. All rights reserved.