在Databricks 11.2 Spark SQL中将逗号分隔列拆分为行的方法
拆分Databricks Spark SQL中对应位置的逗号分隔值为行
针对你在Databricks 11.2版本Spark SQL中的需求,这里提供两种高效的实现方式,确保每行Col1和Col2的逗号分隔值按对应位置拆分为独立行:
方法一:使用array_zip + explode(推荐,更简洁)
利用array_zip将两列拆分后的数组按位置配对,再展开成行:
SELECT element.col1 AS Col1, element.col2 AS Col2 FROM your_table_name LATERAL VIEW explode(array_zip(split(Col1, ','), split(Col2, ','))) exploded AS element;
逻辑说明:
split(Col1, ',')和split(Col2, ',')分别将两列的逗号分隔字符串转为数组;array_zip把两个数组按索引位置配对,生成包含对应元素的结构体数组;explode将结构体数组展开为单独的行,每个结构体中的元素对应拆分后的Col1和Col2值。
方法二:使用posexplode + 位置匹配
通过posexplode拆分时获取元素的位置索引,再通过索引匹配对应元素:
SELECT t1.col_val AS Col1, t2.col_val AS Col2 FROM your_table_name LATERAL VIEW posexplode(split(Col1, ',')) t1 AS pos, col_val LATERAL VIEW posexplode(split(Col2, ',')) t2 AS pos, col_val WHERE t1.pos = t2.pos;
逻辑说明:
posexplode拆分数组时,同时返回元素的位置索引(pos)和元素值;- 通过
WHERE t1.pos = t2.pos确保Col1和Col2中同一位置的元素对应成行,避免交叉匹配。
示例验证
假设你的源表数据如下:
| Col1 | Col2 |
|---|---|
| 1,2,3 | a,b,c |
| 1,2,3,4,5 | a,b,c,d,e |
执行上述任意一种SQL后,都会得到你期望的输出:
| Col1 | Col2 |
|---|---|
| 1 | a |
| 2 | b |
| 3 | c |
| 1 | a |
| 2 | b |
| 3 | c |
| 4 | d |
| 5 | e |
内容的提问来源于stack exchange,提问作者Kumar
相关产品推荐
相关产品推荐

