在 Scala 中将数据框从列重塑为行

reshape dataframe from column to rows in scala

我想使用 scala 在 Spark 中重塑数据框。我发现大部分示例使用 groupBypivot。就我而言,我不想使用 groupBy。这就是我的数据框的样子

  tagid           timestamp value
1     1 2016-12-01 05:30:00     5
2     1 2017-12-01 05:31:00     6
3     1 2017-11-01 05:32:00     4
4     1 2017-11-01 05:33:00     5
5     2 2016-12-01 05:30:00   100
6     2 2017-12-01 05:31:00   111
7     2 2017-11-01 05:32:00   109
8     2 2016-12-01 05:34:00    95

我希望我的数据框看起来像这样,

            timestamp  1  2 
1 2016-12-01 05:30:00  5 100
2 2017-12-01 05:31:00  6 111
3 2017-11-01 05:32:00  4 109
4 2017-11-01 05:33:00  5  NA
5 2016-12-01 05:34:00 NA  95

我使用了没有 groupBy 的 pivot,它抛出了错误。

df.pivot("tagid")

error: value pivot is not a member of org.apache.spark.sql.DataFrame.

我该如何转换?谢谢。

执行以下操作应该可以解决您的问题。

df.groupBy("timestamp").pivot("tagId").agg(first($"value"))

你应该有最终的数据框

+-------------------+----+----+
|timestamp          |1   |2   |
+-------------------+----+----+
|2017-11-01 05:33:00|5   |null|
|2017-11-01 05:32:00|4   |109 |
|2017-12-01 05:31:00|6   |111 |
|2016-12-01 05:30:00|5   |100 |
|2016-12-01 05:34:00|null|95  |
+-------------------+----+----+

有关更多信息,您可以查看 databricks blog