0
튜플의 목록으로 튜플을 방출하는 방법 :.대신 나는이처럼 보이는 끓는 작업이
수입 com.twitter.scalding을 {인수, CSV, 작업, TextLine입니다}
class DataJob(args: Args) extends Job(args) {
val input = args("input")
val output = Csv(args("output"), separator = ",")
def parseLine(x: String):Seq[(String, String, String, String)] = {
List(("a", "b", "c", "d")) //Returns a list, not a tuple
}
TextLine(input).mapTo('line -> ('v1, 'v2, 'v3, 'v4)) {
x:String => {
parseLine(x) // this code fails with arity error
}
}.write(Csv(args("output")))
}
이 실행되면, 나는 다음과 같은 오류가 발생합니다 : 내 parseLine
기능은 튜플의리스트를 반환하지만 코드가 하나의 튜플이 방출 될 것으로 예상하기 때문에
Caused by: java.lang.AssertionError: assertion failed: Arity of (class com.twitter.scalding.LowPriorityTupleSetters$$anon$2) is 1, which doesn't match: + ('v1', 'v2', 'v3', 'v4')
이입니다. 이 코드를 어떻게 작동시킬 수 있습니까? 난 그냥 변경하는 데 필요한 같은
flatMap은 이름에서 알 수 있듯이 매개 변수를 병합합니다. 이전에는 List (List (tuples))를 처리 한 행 목록 (Textline (input))이 입력되었습니다. 병합을 사용하면 원하는 것을 List (튜플)로 가져올 수 있습니다. 또는 List (("a", "b", "c", "d") 대신 직접 반환하도록 parseLine을 변경했을 수 있습니다), 그리고 그것도 작동해야합니다 (그리고 당신이 어떤 포인터 할당을 피하기 때문에 아마도 더 효율적입니다). – C4stor