2013-10-25 2 views
7

Scalding에서 더 작은 필드에서 22 개가 넘는 필드를 가진 파이프를 만들려면 22 개를 초과 할 수없는 스칼라 튜플로 제한됩니다.Scalding map 메서드에서 튜플 대신 콜렉션을 출력 할 수 있습니까?

튜플 대신 모음을 사용할 수 있습니까? 나는 슬프게도 작동하지 않는 다음 예제와 같은 것을 상상한다.

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

답변

4

실제로 할 수있다. 이 질문에 - 당신이 더 나은 솔루션이 나를 제발 알려 찾으면 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

튜플을 사례 클래스로 둘러 쌉니다. 또한 튜플 및 콜렉션을 사용하는 것보다 코드를보다 읽기 쉽고 안전하게 입력 할 수 있습니다.

관련 문제