ペア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)]
使用する 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)
})
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))
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 で入手できます。
Spark RDDは、RDDのままにして配列にしない場合、時間的に効率的です。
strinIntTuppleRDD.reduce((x, y) => if(x._2 > y._2) x else y)