使用Key-Value鍵值对

尽管大多数对RDDs的Spark操作可以包含任意对象类型,有一些特殊的操作仅仅适用于key-value鍵值对。最常见的一些就是分布式的“shuffle“操作,例如通过key对元素分组或聚合。

在Scala中,这些操作操作,在RDDs上是自动可用的,它包含了Tuple2对象(在语言中内置的tuples,通过简单的writing(a,b)来创建)。key-value对操作在PairRDDFunctions类是可用的,它自动封装了一个tuples的RDD。

例如,以下代码对key-value对,使用reduceByKey操作,来统计在一个文件中文本有多少行。

val lines = sc.textFile("data.txt")
val pairs = lines.map(s => (s, 1))
val counts = pairs.reduceByKey((a, b) => a + b)

例如,想按字母排序key-value对,并且最终作为一个对象的数组,使用counts.collect()把它们传输到驱动程序,我们也可以使用counts.sortByKey()。

注意:当使用自定义的对象作为key-value对的key时,你必须确保自定义对象的equals()方法有一个相应的hashCode()方法。对于更详细信息,请查看Object.hashCode() documentation)。

results matching ""

    No results matching ""