C'è qualche funzione Spark che consente di dividere una raccolta in diversi RDD secondo alcuni creteria? Tale funzione consentirebbe di evitare un'eccessiva iterazione. Per esempio:Scala Spark: dividere la raccolta in diversi RDD?
def main(args: Array[String]) {
val logFile = "file.txt"
val conf = new SparkConf().setAppName("Simple Application")
val sc = new SparkContext(conf)
val logData = sc.textFile(logFile, 2).cache()
val lineAs = logData.filter(line => line.contains("a")).saveAsTextFile("linesA.txt")
val lineBs = logData.filter(line => line.contains("b")).saveAsTextFile("linesB.txt")
}
In questo esempio devo iterare 'logData` due volte solo a dare risultati in due file separati:
val lineAs = logData.filter(line => line.contains("a")).saveAsTextFile("linesA.txt")
val lineBs = logData.filter(line => line.contains("b")).saveAsTextFile("linesB.txt")
Sarebbe bello invece di avere qualcosa di simile:
val resultMap = logData.map(line => if line.contains("a") ("a", line) else if line.contains("b") ("b", line) else (" - ", line)
resultMap.writeByKey("a", "linesA.txt")
resultMap.writeByKey("b", "linesB.txt")
Una cosa del genere?
Sembra che tu voglia una variante groupBy che restituisce una mappa sottostringa-> RDD, piuttosto che un RDD di sottostringa-> Iterable [String]? –