2017-12-29 5 views
-1

왜 이것이 작동하지 않는 지 잘 모릅니다. 내 사례 클래스에 매핑하는 대신 튜플을 반환하면 올바르게 작동합니다. 그렇지 않으면 아래 오류가 발생합니다.데이터 집합에서 사례 클래스로 매핑 할 때 오류가 발생했습니다.

case class WinRate(name: String, played: Int, wins: Int, losses: Int)  
val winners = df.select($"winning_heroes").map(row => { 
     row.getList[String](0).toList().map(x => { 
     WinRate(x, 1, 1, 0) 
     }) 
    }).flatMap(x => x) 

오류 :하지 방법에 대한 충분한 인수가 적용됩니다 (n은 INT) 특성 LinearSeqOptimized의 문자열입니다. 지정되지 않은 값 매개 변수 n.

+0

_ 무엇을하고 계십니까? 'map'과'flatMap'을하는 것은 ... 매우 좋았습니다. 요즘은 Spark SQL이 얼마나 많은 돈을 쏟아 부 었는지 (cf. 표준 함수 참조) 말입니다. –

+0

데이터베이스에 문자열 배열 필드가 있습니다. 그래서, 나는 그 중 하나에 대해 문자열을 추출하고 위의 사례 클래스를 수행하려고하는 튜플을 생성합니다. 그렇다면 나는 .groupBy를하고 합계로 승리율을 얻는다. 내가 터플로 작업하게 만들었고, 케이스 클래스로 처리하기를 원했다. 조금 더 읽기 쉽고 읽기 쉽기 때문이다. 나는 스칼라에 대해 꽤 새로울 것이므로 아마도 그것을하는 더/더 관용적 인 방법이있을 것이다. –

+0

'df.printSchema'를 포함하도록 질문을 편집하면 질문을 쉽게 대답 할 수 있습니다. 감사. –

답변

1

toList() 메소드는 어떻게 정의됩니까? paranthesis없이 호출 할 수 있습니까?

row.getList[String](0).toList 
+0

다른 오류가 발생합니다. 데이터 집합에 저장된 유형의 인코더를 찾을 수 없습니다. spark.implicits를 가져 와서 기본 유형 (Int, String 등) 및 Product 유형 (사례 클래스)을 지원합니다. _ 다른 유형을 직렬화하기위한 지원이 다음 릴리스에 추가됩니다. –

관련 문제