像"[1, 2, 3]"一样将字符串转换为数组



非常简单。我有一个类似数组的列编码为字符串(varchar),并希望将其施放为array(然后我可以explode并以"长"格式操纵元素)。

最自然的方法似乎不起作用:

-- just returns a length-1 array with a single string element '[1, 2, 3]'
select array('[1, 2, 3]')
-- errors: DataType array is not supported.
select cast('[1, 2, 3]' as array)

获得我想要的丑陋/不高度/circuit曲的方法是:

select explode(split(replace(replace('[1, 2, 3]', '['), ']'), ', '))
-- '1'
-- '2'
-- '3'

regexp_replace可以包含两个replace,但带有方括号的正则始终很痛苦; ltrimrtrimtrim(BOTH '[]'...)也可以使用)

还有其他简洁的方法吗?我在Spark 2.3.1。

我在这里假设元素是数字。但是你得到这个想法

>>> s = '[1,2,3]'
>>> list(c for c in s if c.isdigit())    
['1', '2', '3']
>>> map(int, list(c for c in s if c.isdigit()))
[1, 2, 3]

相关内容

最新更新