在Dataframe中透视一列,该列对透视列具有多个值

时间:2019-10-22 11:22:28

标签: scala dataframe apache-spark apache-spark-sql

我有一个如下所示的数据框。

<div class="container">
  <div class="green"></div>
  <div class="white"></div>
  <div class="circle">A</div>
</div>

我想将每个SIGx作为一个新列,并将对应的VALUE作为来自现有列SIGNAL的每个SIGx的行。

输出应如下所示。

+------+-------------+------+-----+
|NUM_ID|         TIME|SIGNAL|VALUE|
+------+-------------+------+-----+
|XXXX01|1571634079547|  SIG1|78860|
|XXXX01|1571634090000|  SIG1|25.73|
|XXXX01|1571634042000|  SIG1|25.73|
|XXXX01|1571634050000|  SIG1|25.73|
|XXXX01|1571634050000|  SIG2|25.73|
|XXXX01|1571634066000|  SIG2|25.73|
|XXXX01|1571634074000|  SIG2|25.73|
|XXXX01|1571634090000|  SIG3|25.73|
|XXXX02|1571634088000|  SIG1|25.73|
|XXXX02|1571634040000|  SIG1|25.73|
|XXXX02|1571634048000|  SIG1|25.73|
|XXXX02|1571634056000|  SIG1|25.73|
|XXXX02|1571634088000|  SIG2|25.73|
|XXXX02|1571634072000|  SIG2|25.73|
|XXXX02|1571634080000|  SIG2|25.73|
|XXXX02|1571634088000|  SIG3|25.73|
|XXXX02|1571634094000|  SIG3|25.73|
|XXXX02|1571634038000|  SIG3|25.73|
|XXXX03|1571634046000|  SIG1|25.73|
|XXXX03|1571634054000|  SIG1|25.73|
|XXXX03|1571634062000|  SIG1|25.73|
|XXXX03|1571634070000|  SIG1|25.73|
|XXXX03|1571634078000|  SIG2|25.73|
|XXXX03|1571634092000|  SIG2|25.73|
|XXXX03|1571634036000|  SIG2|25.73|
|XXXX03|1571634044000|  SIG3|25.73|
|XXXX03|1571634052000|  SIG3|25.73|
|XXXX03|1571634060000|  SIG3|25.73|
+------+-------------+------+-----+ 

具有相同时间的SIGx的值应该在同一行中。

有什么办法可以做到这一点? 我尝试使用数据透视功能,但对于具有多个值的数据透视列无法正常工作。

任何潜在客户均表示赞赏。预先感谢!

1 个答案:

答案 0 :(得分:1)

您可以使用groupBy "NUM_ID" "TIME"pivot"SIGNAL",并从"VALUE"获取第一个值,如下所示。

df.groupBy("NUM_ID", "TIME")
  .pivot("SIGNAL")
  .agg(first("VALUE"))

希望这会有所帮助!