2014-11-23 2 views
1


문자열 배열 인 열을 값을 연결하여 문자열로 변환하려고하지만 일부 특정 열을 배열로 연결할 수없는 방법 문자열의 :스키마 RDD에서 열을 문자열 배열로 변환

4/11/23 10시 40분 16초 오류 executor.Executor :

val converted = jsonFiles.map(line=> {line(7).asInstanceOf[Array[String]] }) 
converted.collect 

그리고 내가 끝낼 단계 2.0에서 작업 1.0 예외 (TID 5) java.lang.ClassCastException : scala.collection.mutable.ArrayBuffer cann [Ljava.lang.String;

내가 뭘 잘못하고 있니?

감사합니다,


다니엘
+0

'열'이란 무엇입니까? 'line (7)'은 ArrayBuffer를 돌려주고, Array [String]'으로 바꿀 수 없습니다. – pedrofurla

+0

비슷한 문제가 있습니다 - asInstanceOf [scala. 내 응용 프로그램의 경우 collection.mutable.ArrayBuffer [(Int, String)]] 및 asInstanceOf [Iterable [(Int, String)]] 해당 열을 사용하여 해당 RDD를 매핑하려고하면 "GenericRowWithSchema can not 스케이프 2 " –

답변

0

난 당신이 찾고있는 것을 제대로 이해하지 않을 수 있습니다,하지만 난 노력하겠습니다. 당신은

val converted = jsonFiles.map(line=> {line(7).split(" ")}) 
converted.collect 

여기서 문제는 "단계 2.0 (TID 5)에서 작업 1.0 예외"(당신이 무엇을하는지 따라 다름)이다해야 문자열의 라인을 읽을 필요가 공백으로 배열에 문자열을 분할 분리되지 않은 하나의 문자열로. 이를 위해 우리가해야

:

  • 분할 문자열을 ""로 배열에
  • 처음 4 열의 배열을 만들
  • 이 배열에 추가 오른쪽 부분 배열

코드에서 문자열을 합병

val columns = line(7).split(" ") 
columns.take(4) :+ columns.drop(4).mkString(" ") 
+0

답장을 보내 주셔서 감사합니다. Itreable [String]을 캐스팅하고 mkString을 호출했습니다. 완벽한 작업 :) –

+0

TUPLES에 대해 어떻게해야합니까? Array (Int, String)의 배열을 가진 열이 있으므로 ArrayBuffer 또는 Iterable에 내 열을 캐스트 한 후에도 mkString을 실행할 수 없습니다. –

0

Itreable [String]에 캐스팅을 끝내고 mkString이라고합니다.

관련 문제