2017-03-25 88 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))