如果您想在Scalding中創建一個具有超過22個字段的管道,那麼您將受到Scala元組的限制,該元組不能超過22個項目。我可以在Scalding地圖方法中輸出集合而不是元組嗎?
有沒有辦法使用集合而不是元組?我想像下面的例子,這可悲的不起作用:
input.read.mapTo('line -> aLotOfFields) { line: String =>
(1 to 24).map(_.toString)
}.write(output)
如果您想在Scalding中創建一個具有超過22個字段的管道,那麼您將受到Scala元組的限制,該元組不能超過22個項目。我可以在Scalding地圖方法中輸出集合而不是元組嗎?
有沒有辦法使用集合而不是元組?我想像下面的例子,這可悲的不起作用:
input.read.mapTo('line -> aLotOfFields) { line: String =>
(1 to 24).map(_.toString)
}.write(output)
其實你可以。它在常見問題 - https://github.com/twitter/scalding/wiki/Frequently-asked-questions#what-if-i-have-more-than-22-fields-in-my-data-set
val toFields = (1 to 24).map(f => Symbol("field_" + f)).toList
input
.read
.mapTo('line -> toFields) { line: String =>
new Tuple((1 to 24).map(_.toString).map(_.asInstanceOf[AnyRef]): _*)
}
最後的地圖(_ asInstanceOf [AnyRef]),相貌醜陋,所以如果你找到更好的解決辦法,讓我知道吧。
將你的元組換成大小寫類。它也會使你的代碼更具可讀性和安全性,分別比使用元組和集合更安全。