Scala 如何处理索引值
这是文本文件格式的数据。我需要找到每个城市的最高工资Scala 如何处理索引值,scala,apache-spark,apache-spark-sql,sparkcore,Scala,Apache Spark,Apache Spark Sql,Sparkcore,这是文本文件格式的数据。我需要找到每个城市的最高工资 first_name last_name city county salary -------------------------------------------------------- James Butt New Orleans Orleans 250000 Josephine Darakjy Brighton Livingston 30000
first_name last_name city county salary
--------------------------------------------------------
James Butt New Orleans Orleans 250000
Josephine Darakjy Brighton Livingston 300000
Art Venere Bridgeport Gloucester 400000
Leota Dilliard Bridgeport Gloucester 430000
> val scq = sc.textFile("path.txt")
> scq.flatMap(al=>al.split("\n")).sortBy(_._5,ascending = false).collect.take(5).foreach(println)
// sorting on salary
但是我得到了错误,因为value\u 5不是字符串的成员
,当我使用toString
时,它给出了错误value\u 5不是char
的成员。
应该如何处理?试试这个:
> val scq = sc.textFile("path.txt")
> val d = scq.map(_.split("\t")).sortBy(_.apply(4), ascending = false)
这将产生一个RDD[Array[String]]
作为输出。如果要将它们视为元组,可以执行以下操作:
> val d1 = d.map(c => (c(0), c(1), c(2), c(3), c(4))) // Prefer case class over this always
> d.collect.foreach(println)
这将产生以下输出:
(Leota,Dilliard,Bridgeport,Gloucester,430000)
(Art,Venere,Bridgeport,Gloucester,400000)
(Josephine,Darakjy,Brighton,Livingston,300000)
(James,Butt,New Orleans,Orleans,250000)
split
返回将使用arr(4)
访问其第5个元素的Array
<代码>元组。_5用于访问元组的第5个元素。此外,您可能需要使用\n
以外的内容拆分文件,因为textFile
已经为您进行了拆分。整行被视为字符串类型的一列。按行拆分后,必须使用分隔符分隔列。然后,只有您可以使用\u 5
@philantrovert我做了,但却得到了错误值\u 5不是org.apache.spark.rdd.rdd[Array[String]@SivaprasannaSethuraman val againmap=flatma.map(_.split(“\t”))的成员我正在使用它,但仍然不起作用。@RaviAnand你有没有正确阅读philantrovert的评论?我这样做了,但我得到了[Ljava.lang.String;@3bd1d3ae[Ljava.lang.String;@27b88459[Ljava.lang.String;@4900e064][Ljava.lang.String;@794C64E6就像我说的那样,这是RDD[]数组[String]
。如果你做d.map(c=>(c(0),c(1),c(2),c(3),c(4))
你将得到RDD元组