首页 > 解决方案 > 将字符串的scala Seq转换为键值对

问题描述

我有一个像 [1,2] 这样的数组

我创建了一个将执行特定操作的 udf。下面是 UDF

def addOne(elements: Seq[String]) = elements.map(element => ("id",s"a-$element","v","In"))

所以输出p就像 [["id","a-1","v","In"],["id","a-2","v","In"]]

我想把它转换成键值对

最终的 o/p 应该类似于

{

id:"a-1",

v:"In"

},
{

id:"a-2",

v:"In"

}

标签: scalaapache-spark

解决方案


您可以尝试以下方法

如果元素的数量不是偶数,我已经添加了 if 条件来处理这种方法将为您提供可变映射

val seq = Seq(1,"a",2,"b")

val itr = seq.iterator

val newMap: scala.collection.mutable.Map[Any,Any] = scala.collection.mutable.Map()

if(seq.size % 2 == 0) 

while(itr.hasNext) {

 newMap += (itr.next->itr.next)

}

println(newMap)

在不可变 Map 中获取结果的其他选项

 val seq = Seq(1,"a",2,"b")


def listToMap[T](xs: Seq[T]) =
  xs.grouped(2)
    .map{case List(a, b) => (a,b)}
    .toMap


val newMap = listToMap(seq)

println(newMap)

推荐阅读