【发布时间】:2020-04-23 01:18:02
【问题描述】:
我想使用 Scala 案例类的数组编写一个嵌套数据结构,该结构由另一个 Map 中的 Map 组成。
结果应该转换这个数据框:
|Value|Country| Timestamp| Sum|
+-----+-------+----------+----+
| 123| ITA|1475600500|18.0|
| 123| ITA|1475600516|19.0|
+-----+-------+----------+----+
进入:
+--------------------------------------------------------------------+
|value |
+--------------------------------------------------------------------+
[{"value":123,"attributes":{"ITA":{"1475600500":18,"1475600516":19}}}]
+--------------------------------------------------------------------+
下面的actualResult 数据集让我很接近,但结构与我预期的数据框不太一样。
case class Record(value: Integer, attributes: Map[String, Map[String, BigDecimal]])
val actualResult = df
.map(r =>
Array(
Record(
r.getAs[Int]("Value"),
Map(
r.getAs[String]("Country") ->
Map(
r.getAs[String]("Timestamp") -> new BigDecimal(
r.getAs[Double]("Sum").toString
)
)
)
)
)
)
actualResult 数据集中的 Timestamp 列不会合并到同一 Record 行,而是创建两个单独的行。
+----------------------------------------------------+
|value |
+----------------------------------------------------+
[{"value":123,"attributes":{"ITA":{"1475600516":19}}}]
[{"value":123,"attributes":{"ITA":{"1475600500":18}}}]
+----------------------------------------------------+
【问题讨论】:
标签: scala apache-spark