我在表中有一个列,其中包含可变长度的字符串:
|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|["", "", "", "", "", "", ""]|
如何在Databricks上的sql中达到预期的结果?
添加我的评论作为答案。我很少使用 regexp_replace 但这似乎有效。对于此处缺乏更多信息,我们深表歉意。
在 SQL 版本中尝试更改此设置:
regexp_replace(value, '(.{2})', '$1,')
对此:
regexp_replace(value, '(.{2})', '$\1,')