我是Scala和Spark的新手,我正努力做到以下几点, 我试图将Seq转换为Map,同时在转换序列时通过添加“ _suffix”来修改值,如下所示:
val columns = Seq($"col2",$"col3")
val map = columns.map(t => t.toString() -> t.toString()+"_suffix").toMap
但是,出现以下错误:
scala> val map = columns.map(t => t.toString() -> t.toString()+"_suffix").toMap
<console>:25: error: Cannot prove that String <:< (T, U).
val map = columns.map(t => t.toString() -> t.toString()+"_suffix").toMap
此外,.map
结果返回以下内容:
scala> val map = columns.map(t => t.toString() -> t.toString()+"_suffix")
map: Seq[String] = List((col2,col2)_suffix, (col3,col3)_suffix)
这就是我想要产生的:
map: Seq[(String, String)] = List((col2,col2_suffix), (col3,col3_suffix)
所以我最终可以将其转换为地图:
map: scala.collection.immutable.Map[String,String] = Map(col2 -> col2_suffix, col3 -> col3_suffix)
我很难达到这个目标,有什么建议吗?
答案 0 :(得分:2)
这是您应该输入的内容($将在有问题的引号之前被删除):
scala> val columns = Seq("col2","col3")
columns: Seq[String] = List(col2, col3)
在您的代码中,无需使用toString()
方法
在每个字符串上,因为它们已经是strings
,
并使用如下地图:
val map = columns.map(t => (t,t+"_suffix")).toMap
在Scala REPL中:
scala> val map = columns.map(t => (t,t+"_suffix"))
map: Seq[(String, String)] = List((col2,col2_suffix), (col3,col3_suffix))
scala> val map = columns.map(t => (t,t+"_suffix")).toMap
map: scala.collection.immutable.Map[String,String] = Map(col2 -> col2_suffix, col3 -> col3_suffix)
答案 1 :(得分:2)
您所做的是正确的,只需添加一些括号即可使用:
columns.map(t => t.toString() -> (t.toString() + "_suffix")).toMap
从结果中可以看到,"_suffix"
被添加到元组的字符串中,即
(col2,col2)_suffix
您想要做的是仅将字符串添加到第二个元素,因此必须加上括号。