web-dev-qa-db-ja.com

ペアRDDで最大値を見つける方法

私はspark=ペアRDD(キー、カウント)を以下のように持っています

Array[(String, Int)] = Array((a,1), (b,2), (c,1), (d,3))

spark scala API?

編集:ペアRDDのデータ型はorg.Apache.spark.rdd.RDD [(String、Int)]

15
Vijay Innamuri

使用する Array.maxBy 方法:

val a = Array(("a",1), ("b",2), ("c",1), ("d",3))
val maxKey = a.maxBy(_._2)
// maxKey: (String, Int) = (d,3)

またはRDD.max

val maxKey2 = rdd.max()(new Ordering[Tuple2[String, Int]]() {
  override def compare(x: (String, Int), y: (String, Int)): Int = 
      Ordering[Int].compare(x._2, y._2)
})
21
Sergey Lagutin

takeOrdered(1)(Ordering[Int].reverse.on(_._2))を使用します。

val a = Array(("a",1), ("b",2), ("c",1), ("d",3))
val rdd = sc.parallelize(a)
val maxKey = rdd.takeOrdered(1)(Ordering[Int].reverse.on(_._2))
// maxKey: Array[(String, Int)] = Array((d,3))
13
Jacek Laskowski

Pysparkの場合:

aをキーとして文字列、値として整数を持つペアRDDとする

a.max(lambda x:x[1])

最大値を持つキーと値のペアを返します。基本的に、max関数は、ラムダ関数の戻り値によって順序付けられます。

ここで、a('key',int)x[1]などの要素を持つペアRDDで、要素の整数部分を指します。

max関数自体はキーで並べ替えて最大値を返すことに注意してください。

ドキュメントは https://spark.Apache.org/docs/1.5.0/api/python/pyspark.html#pyspark.RDD.max で入手できます。

6
Mayank

Spark RDDは、RDDのままにして配列にしない場合、時間的に効率的です。

strinIntTuppleRDD.reduce((x, y) => if(x._2 > y._2) x else y)
4
Rubber Duck