Scala:遍历数组并以 List 的形式返回最终结果以及计算值

问题描述 投票:0回答:1

我有一个数据集,我正在将值收集到一个数组中。

样本数据:

val sampleData= Seq(
     ("1", "12"),
    ("2","22")
   ).toDF("id","value").as[(String,String)]

我必须迭代此数据集并使用数据集中存在的值形成结果列表(地图)。

输出应如下所示

List(
    Map("id"-> "1", "value"->"12"),
    Map("id"-> "2", "value"->"22"))

我尝试在外部创建一个变量

finalData
,并尝试在遍历数组时保存该值,但该变量在
foreach
条件内没有任何范围。

我尝试过的片段

val finalData = List[Map[String,String]]
val someData = ReconResultDSDummy.collect().foreach(f => {
            var intermediateData = Map("id" -> f._1, "value" -> f._2)
            var finalData = finalData :+ intermediateData
    }

我无法在迭代数据时递归地将值添加到

finalData

请让我知道我在这里缺少什么或者是否有更好的方法。

scala apache-spark arraylist
1个回答
0
投票

“基本”实现是将

map
每个元组转换为
Map
而不是
foreach
,这是为了产生副作用但忽略结果:

val someData = df
  .collect()
  .map(f => Map("id" -> f._1, "value" -> f._2))
// Gives a Seq[Map[String, String]]

这里需要注意的一个潜在重要事项是,调用

collect()
会将驱动程序节点上的所有数据加载到内存中。如果它不适合内存,它将失败。

一般来说,您需要在

map()
之前执行
collect()
以减少驱动程序上的负载。 在这种具体情况下,我不确定这会产生任何真正的影响。

© www.soinside.com 2019 - 2024. All rights reserved.