【发布时间】:2016-05-16 17:50:30
【问题描述】:
我有以下输入元组想要进行平面映射:(String, List[String])
例如输入:
("a", ["1", "2"])
("b", ["3", "4"])
需要的输出:
("a", "1")
("a", "2")
("b", "3")
("b", "4")
在 Scalding/Scala 中是否有一种优雅的方式来做到这一点?
【问题讨论】:
我有以下输入元组想要进行平面映射:(String, List[String])
例如输入:
("a", ["1", "2"])
("b", ["3", "4"])
需要的输出:
("a", "1")
("a", "2")
("b", "3")
("b", "4")
在 Scalding/Scala 中是否有一种优雅的方式来做到这一点?
【问题讨论】:
您可以使用多行 for ... yield 表达式来做到这一点:
for {
(a, bs) <- tupleList
b <- bs
} yield (a, b)
【讨论】:
可能不是最好的解决方案,但级联地图然后平展结果是我能想到的最好的。
关于 FP 的奇妙之处在于,您可以用非常不同的方式来做同样的事情。希望有人发布不同的解决方案
val input = List( ("a", List("1", "2")), ("b", List("3","4")))
val output = input.map(it => it._2.map { (it._1, _)}).flatten
如图所示,输出可以更改为
input.flatMap(tuple => tuple._2.map { (tuple._1 , _) })
【讨论】: