在 Spark(Scala) 中排序

钦瓦尔普拉萨德

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

请帮帮我。谢谢。

巴拉吉·雷迪
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 个字段,但您使用的是 upto _17。我想知道,您如何没有收到任何编译时错误myDouble = required_fields.map(x=>(x._1,x._2,x._3,x._8,x._15.toDouble,x._16,x._17))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章