我正在读取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列的类型从String更改为Double。所以我这样做了,
val myDouble = required_fields.map(x=>(x._1,x._2,x._3,x._8,x._15.toDouble,x._16,x._17))
现在我只需要从第15列中获取前10个值,所以我使用了takeOrdered函数
myDouble.takeOrdered(10)(Ordering[Double].on(x=>(-x._5)))
但是当我运行最后一个命令时,我得到了ArrayIndexOutOfBound异常17。
请帮帮我。 感谢。
答案 0 :(得分: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))
您期望{strong> _8,_15,_16,_17 这些字段在Tuple7(...)
上不存在,这意味着它只有7个字段,但您使用的是_17
。我想知道你怎么没有得到myDouble = required_fields.map(x=>(x._1,x._2,x._3,x._8,x._15.toDouble,x._16,x._17))