订购Spark(Scala)

时间:2017-03-25 17:19:40

标签: scala apache-spark

我正在读取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。

请帮帮我。 感谢。

1 个答案:

答案 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))

的任何编译时错误