订购RDD [String]

Chr*_*ris 6 scala apache-spark

考虑

val animals = List("penguin","ferret","cat").toSeq
val rdd = sc.makeRDD(animals, 1) 
Run Code Online (Sandbox Code Playgroud)

我想订购这个RDD.我是Scala的新手,对于如何做到这一点感到有些困惑.

Dav*_*fin 6

RDD文档可以在这里找到.看看sortBy:

sortBy[K](
  f: (T) ? K, 
  ascending: Boolean = true, 
  numPartitions: Int = this.partitions.size
)
Run Code Online (Sandbox Code Playgroud)

K是您要排序的RDD的片段类型.f是一个函数,您可以在其他地方定义def并按名称传递它,也可以在行中匿名创建一个函数(更像scala).ascending并且numPartitions应该是自我解释的.

所以,考虑到这一切,尝试:

rdd.sortBy[String]({animal => animal})
Run Code Online (Sandbox Code Playgroud)

然后尝试这个:

rdd.sortBy[String]({animal => animal}, false)
Run Code Online (Sandbox Code Playgroud)

然后是这个,它将RDD按动物名称中的字母"e"的数量从最多到最小排序:

rdd.sortBy[Int]({a => a.split("").filter(char => char == "e").size}, false)
Run Code Online (Sandbox Code Playgroud)

应该注意的是原始文件rdd没有排序 - 操作返回一个新的,排序的RDD.