Ho una serie di record, che ho bisogno di:Spark: ordina i record nei gruppi?
1) Gruppo da 'Data', 'città' e 'tipo'
2) Ordina ogni gruppo da 'premio
Nella mia codice:
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
object Sort {
case class Record(name:String, day: String, kind: String, city: String, prize:Int)
val recs = Array (
Record("n1", "d1", "k1", "c1", 10),
Record("n1", "d1", "k1", "c1", 9),
Record("n1", "d1", "k1", "c1", 8),
Record("n2", "d2", "k2", "c2", 1),
Record("n2", "d2", "k2", "c2", 2),
Record("n2", "d2", "k2", "c2", 3)
)
def main(args: Array[String]): Unit = {
val conf = new SparkConf()
.setAppName("Test")
.set("spark.executor.memory", "2g")
val sc = new SparkContext(conf)
val rs = sc.parallelize(recs)
val rsGrp = rs.groupBy(r => (r.day, r.kind, r.city)).map(_._2)
val x = rsGrp.map{r =>
val lst = r.toList
lst.map{e => (e.prize, e)}
}
x.sortByKey()
}
}
Quando cerco di ordinare gruppo ottengo un errore:
value sortByKey is not a member of org.apache.spark.rdd.RDD[List[(Int,
Sort.Record)]]
Cosa c'è di sbagliato? Come ordinare?
Se si crea la parte relativa agli argomenti di ordinamento della chiave, sembra che si potrebbe anche essere in grado di utilizzare repartitionAndSortWithinPartitions() per ottenere la scala "tera-sort". Vedi http://spark.apache.org/docs/1.3.0/api/scala/index.html#org.apache.spark.rdd.OrderedRDDFunctions – steamer25