2013-10-25 3 views
7

Scaldingで小さいフィールドから22フィールド以上のパイプを作成する場合は、Scalaタプルによって制限されます。スカラタプルは22個を超えることはできません。Scalding mapメソッドでタプルではなくコレクションを出力できますか?

タプルの代わりにコレクションを使用する方法はありますか?私は悲しいことに動作しない次の例のようなものを想像します。

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

答えて

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]): _*) 

    } 

最後のマップは、(。_ asInstanceOf [AnyRef])が醜いです。

3

タプルをケースクラスにラップします。また、タプルやコレクションを使うよりも、コードを読みやすく、型の安全性を高めることができます。

関連する問題