2017-10-15 55 views
-1

火花界異常的我是一個初學者到Scala和我在做什麼是數據集映射到(k, v)對其中kv(0)kv(1)是字符串,kv(2)是一個列表。代碼列表如下:了使用Scala的

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

但這裏的問題,有數據集中kv(2)一些空列表。因此,當我使用.collect()收集所有元素時,可能會出現越界異常。 我在想的是定義一個函數並檢查kv的長度。有什麼簡單的方法,我可以忽略異常並保留該過程,或用字符串替換kv(2)

回答

0

lines => lines.split('^')功能表明rdd_business RDD都是RDD[String],你是分裂與^琴絃這將使你RDD[Array[String]]並從您嘗試使用KV提取數組的元素(0),KV(1)和KV (2)。您得到的例外是因爲RDD[String]rdd_business對象之一)中可能只有一個^

那麼你在這種情況下可以做的是使用TryOption

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")))) 

爲了獲得更好的安全性,你可以在陣列中的所有元素應用TryOption作爲

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")))) 

可以爲Option繼續以同樣的方式爲好。

我希望答案有幫助

+0

這真的有幫助,謝謝〜 –