7

Scalding の小さいフィールドから 22 を超えるフィールドを持つパイプを作成する場合、22 を超える項目を持つことができない Scala タプルによって制限されます。

タプルの代わりにコレクションを使用する方法はありますか? 次の例のようなものを想像しますが、残念ながらうまくいきません:

input.read.mapTo('line -> aLotOfFields) { line: String =>
  (1 to 24).map(_.toString)
}.write(output)
4

2 に答える 2

4

実際にできます。FAQ にあります - 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]): _*)

  }

最後の map(_.asInstanceOf[AnyRef]) は見た目が悪いので、より良い解決策を見つけたら教えてください。

于 2013-11-07T20:53:43.843 に答える
3

タプルをケース クラスにラップします。また、タプルとコレクションをそれぞれ使用するよりも、コードが読みやすくなり、タイプ セーフになります。

于 2013-12-01T13:13:21.800 に答える