我想从宽表中取出一组列。我试着用下面的 SQL
引发错误的语法 Only one generator allowed per select clause but found 2. stack...
```
SELECT
Id,
STACK(2, 'TRANS1', TRANS1, 'TRANS2', TRANS2) AS (TRANS_TYPE, TRANS_VALUE),
STACK(2, 'ORD1', ORD1, 'ORD2', ORD2) AS (ORD_TYPE, ORD_VALUE)
FROM TRANS
所以我想看看是否有任何简单的替代方案来达到预期的效果。有没有可能使用 `LATERAL VIEW` 与 `STACK` sparksql中的函数?
现有数据集示例:
+-------+-------+-------+-------+-------+
|Id |TRANS1 |TRANS2 |ORD1 | ORD2 |
+-------+-------+-------+-------+-------+
|345 |10 |12 |1 |1.2 |
|769 |20 |24 |2 |2.4 |
+-------+-------+-------+-------+-------+
可以使用以下代码创建:
df = sqlCtx.createDataFrame(
[
(345, 10, 12, 1, 1.2),
(769, 20, 24, 2, 2.4)
],
('Id','TRANS1','TRANS2','ORD1','ORD2')
)
预期产量:
+-------+--------------+--------------+--------------+--------------+
|Id |TRANS_TYPE |TRANS_VALUE |ORD_TYPE |ORD_VALUE |
+-------+--------------+--------------+--------------+--------------+
|345 |TRANS1 |10 |ORD1 |1 |
|345 |TRANS2 |12 |ORD2 |1.2 |
|769 |TRANS1 |20 |ORD1 |2 |
|769 |TRANS2 |24 |ORD2 |2.4 |
+-------+--------------+--------------+--------------+--------------+
1条答案
按热度按时间px9o7tmv1#
您可以将参数修改为
stack
. 你可以替换string
与double
/float
以确保列类型相同。