2017-10-15 3 views
-1

를 사용하여 불꽃 바운드 예외에서 나는 스칼라 초보자있어 무엇을 내가 뭘하는 kv(0)kv(1)은 문자열과 kv(2)이 목록입니다 (k, v)쌍에 데이터 집합을 매핑하는 것이다. 데이터 집합 kv(2)에 대한 몇 가지 빈리스트가,스칼라

val rdd_q1_bs = rdd_business.map(lines => lines.split('^')).map(kv => 
    (kv(0), (kv(1), kv(2)))) 

그러나 문제는 여기에있다 : 코드는 아래와 같습니다. 따라서 .collect()을 사용하여 모든 요소를 ​​수집하면 범위를 벗어나는 예외가 발생할 수 있습니다. 내가 생각하는 것은 함수를 정의하고 길이를 확인하는 것입니다 kv. 예외를 무시하고 프로세스를 유지할 수있는 간단한 방법이 있습니까, 아니면 kv(2)을 String으로 대체 할 수 있습니까?

답변

0

lines => lines.split('^') 기능은 rdd_business RDD 모든 RDD[String] 것을 제안하고 당신은 당신이 (0), KV (1) KV KV를 사용하여 배열의 요소를 추출하려고하는 것과 당신에게 RDD[Array[String]]을 줄 것 ^로 문자열을 분할하는 (2). 예외가 발생하는 이유는 RDD[String] (rdd_business 개체) 중 하나에 ^이 하나만있을 수 있기 때문입니다.

그렇다면이 경우 할 수있는 일은 Try 또는 Option입니다.

import scala.util.Try 
val rdd_q1_bs = rdd_business.map(lines => lines.split('^')).map(kv => 
    (kv(0), (kv(1), Try(kv(2)) getOrElse("not found")))) 

더 나은 안전을 위해 당신은 당신이뿐만 아니라 Option 동일한 방식으로 진행할 수 있습니다

val rdd_q1_bs = rdd_business.map(lines => lines.split('^')).map(kv => 
    (Try(kv(0)) getOrElse("notFound"), (Try(kv(1)) getOrElse("notFound"), Try(kv(2)) getOrElse("not found")))) 

으로 배열의 모든 요소에 Try 또는 Option을 적용 할 수 있습니다.

답변이 도움이 되었기를 바랍니다.

+0

감사합니다. –