0

很简单。我有一个类似数组的列,编码为字符串varchararrayexplode

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

-- 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)

获得我想要的东西的丑陋/不优雅/迂回的方式是:

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

regexp_replace可以包含这两者replace,但带方括号的正则表达式总是很痛苦;ltrim或者rtrimtrim(BOTH '[]'...)可以使用)

有没有更简洁的方法来解决这个问题?我在 Spark 2.3.1 上。

4

1 回答 1

-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]
于 2019-02-24T07:58:20.663 回答