0

如何在 Spark 2 SQL 中创建垂直表。

我正在使用 Spark 2 / SQL / Scala 构建 ETL。我有普通表结构中的数据,比如。

输入表:

| ID | A  | B  | C  | D  |
| 1  | A1 | B1 | C1 | D1 |
| 2  | A2 | B2 | C2 | D2 |

输出表:

| ID | Key | Val |
| 1  | A   | A1  |
| 1  | B   | B1  |
| 1  | C   | C1  |
| 1  | D   | D1  |
| 2  | A   | A2  |
| 2  | B   | B2  |
| 2  | C   | C2  |
| 2  | D   | D2  |
4

1 回答 1

0

这也可以解决问题:

输入数据:

+---+---+---+---+---+
|ID |A  |B  |C  |D  |
+---+---+---+---+---+
|1  |A1 |B1 |C1 |D1 |
|2  |A2 |B2 |C2 |D2 |
|3  |A3 |B3 |C3 |D3 |
+---+---+---+---+---+

压缩列标题和要包含的列数:

val cols = Seq("A","B","C","D") zip Range(0,4,1)
df.flatMap(r => cols.map(i => (r.getString(0),i._1,r.getString(i._2 + 1)))).toDF("ID","KEY","VALUE").show()

结果应如下所示:

+---+---+-----+
| ID|KEY|VALUE|
+---+---+-----+
|  1|  A|   A1|
|  1|  B|   B1|
|  1|  C|   C1|
|  1|  D|   D1|
|  2|  A|   A2|
|  2|  B|   B2|
|  2|  C|   C2|
|  2|  D|   D2|
|  3|  A|   A3|
|  3|  B|   B3|
|  3|  C|   C3|
|  3|  D|   D3|
+---+---+-----+

祝你好运!!

于 2018-05-19T20:01:38.803 回答