如何使用Spark SQL将GPS坐标格式单列拆分为多列
解决Spark SQL拆分GPS坐标为多列的问题
嘿,我懂你遇到的问题了——你用explode(split(...))得到的是把拆分后的结果变成了多行,但你实际想要的是把GPS坐标拆成四个独立的列对吧?
为什么原来的方法不对?
explode()函数的作用是把数组里的每个元素拆成单独的行,所以你那行语句会把一行数据变成四行,这和你想要的横向拆分成多列的需求正好相反。
正确的实现方式
Spark SQL的split()函数会返回一个数组,我们可以直接通过数组下标来提取每个元素作为单独的列,索引从0开始:
SELECT split(`col1`, ' ')[0] AS `1st_split`, split(`col1`, ' ')[1] AS `2nd_split`, split(`col1`, ' ')[2] AS `3rd_split`, split(`col1`, ' ')[3] AS `4th_split` FROM table_example;
优化:处理多余空格
如果你的col1里可能存在多个连续空格(比如坐标之间不小心多打了空格),可以把分隔符改成\\s+(匹配一个或多个空白字符),避免拆分出空字符串:
SELECT split(`col1`, '\\s+')[0] AS `1st_split`, split(`col1`, '\\s+')[1] AS `2nd_split`, split(`col1`, '\\s+')[2] AS `3rd_split`, split(`col1`, '\\s+')[3] AS `4th_split` FROM table_example;
这样执行后,就能得到你预期的四列结果啦。
内容的提问来源于stack exchange,提问作者UgoL
相关产品推荐
相关产品推荐

