2017-03-25 87 views
-1

我從一個CSV文件中讀取,我想從整個CSV只有特定的領域我的命令如下:訂購的火花(斯卡拉)

val readfile = sc.textFile("path").map(m=>m.split(",").filterNot(._startsWith("NA")))  
val required_fields = readfile.map(x=>(x(0),x(1),x(2),x(8),x(15),x(16),x(17))) 

現在我想改變從15列的類型要加倍的字符串。所以,我這樣做,

val myDouble = required_fields.map(x=>(x._1,x._2,x._3,x._8,x._15.toDouble,x._16,x._17)) 

現在我需要15欄只取前10個值,所以我用takeOrdered funtion

myDouble.takeOrdered(10)(Ordering[Double].on(x=>(-x._5))) 

但是當我運行的最後一個命令我得到ArrayIndexOutOfBound異常17

請幫我一把。 謝謝。

+0

你能分享一些樣本數據嗎? – BDR

回答

0
val readfile = sc.textFile("path").map(m=>m.split(",").filterNot(._startsWith("NA")))  
val required_fields = readfile.map(x=>(x(0),x(1),x(2),x(8),x(15),x(16),x(17))) 

第二行是相當於

val required_fields = readfile.map(x=> Tuple7(x(0),x(1),x(2),x(8),x(15),x(16),x(17))) 

,說,你的元組有7場。

你的問題在這裏。

myDouble = required_fields.map(x=>(x._1,x._2,x._3,x._8,x._15.toDouble,x._16,x._17)) 

你期待的元組領域_8,_15,_16,_17不上Tuple7(...)存在,這意味着它僅獲得7場,但使用的是高達_17 .I'm納悶,你怎麼沒得到任何編譯時間錯誤myDouble = required_fields.map(x=>(x._1,x._2,x._3,x._8,x._15.toDouble,x._16,x._17))