如何为单个类型爆炸火花列值



我使用spark 2.3和scala 2.11.8。

我有一个如下所示的数据帧,其中x1和x2是类型,并且我在它们各自的列x1cnt和x2cnt中有它们的单独计数。

预期的数据框如下所示,需要有列'type',每个记录有x1和x2,列'count'有各自的计数。

这个例子只有两种类型,但还会有更多。

Input DataFrame:
+--------------------+-----------------------+-----+-----+
|                col1|                   col2|x1cnt|x2cnt|
+--------------------+-----------------------+-----+-----+
|                   1|                     17|    2|    4|
|                   1|                     21|    0|    6|
|                   1|                    917|    0|    8|
|                   1|                      1|   35|   55|
|                   1|                    901|    0|    0|
|                   1|                    902|    0|   74|
+--------------------+-----------------------+-----+-----+

预期结果,

Expected DataFrame:
+--------------------+-----------------------+-----+-----+
|                col1|                   col2| type|count|
+--------------------+-----------------------+-----+-----+
|                   1|                     17|   x1|    2|
|                   1|                     17|   x2|    4|
|                   1|                     21|   x1|    0|
|                   1|                     21|   x2|    6|
|                   1|                    917|   x1|    0|
|                   1|                    917|   x2|    8|
|                   1|                      1|   x1|   35|
|                   1|                      1|   x2|   55|
|                   1|                    901|   x1|    0|
|                   1|                    901|   x2|    0|
|                   1|                    902|   x1|    0|
|                   1|                    902|   x2|   74|
+--------------------+-----------------------+-----+-----+

任何帮助都是感激的。

STACK函数的作用就像反向的PIVOT

select 
col1
, col2
, stack(2, 'x1', x1cnt, 'x2', x2cnt) 
from 
table;

相关内容

  • 没有找到相关文章

最新更新