2017-07-03 3 views
0

Ich bin ein Neuling auf funktionale Programmiersprache und ich versuche Funke scala Ziel zu lernen, ist die rdf datset nach Fach zu partitionieren der Code ist unten:partitionieren die rdf Datensätze nach Fach in Funken scala

object SimpleApp { 

    def main(args: Array[String]): Unit = { 

    val sparkConf = 
     new SparkConf(). 
     setAppName("SimpleApp"). 
     setMaster("local[2]"). 
     set("spark.executor.memory", "1g") 

    val sc = new SparkContext(sparkConf) 

    val data = sc.textFile("/home/hduser/Bureau/11.txt") 
    val subject = data.map(_.split("\\s+")(0)).distinct.collect 

    } 

} 

So bekomme ich die Themen wiederherstellen, aber es gibt ein Array von String auch mapPartitions (func) und mapPartitionsWithIndex (func): die Funktion muss Iterator sein Also, wie gehe ich vor?

+0

können Sie Fügen Sie ein Beispiel Ihrer Eingabedatei und die von ihr erzeugte Ausgabe hinzu. – jsdeveloper

+0

Meine Eingabedatei ist ein RDF-Dataset im Format von Ntriples: Für jede Zeile haben wir den Betreff, das Objekt und Prädikat und für die Ausgabe generiert es: HashPartitioner kann keine Array-Schlüssel partitionieren. – Marry

+0

Bitte markieren Sie die Antwort als richtig, wenn Sie Ihr Problem gelöst haben – jsdeveloper

Antwort

0

Partitionierung Ihrer RDD nach Thema würde wahrscheinlich am besten getan werden, indem Sie eine HashPartitioner verwenden. Die HashPartitioner funktioniert durch ein RDD von n-Tupeln zu nehmen und Sortieren der Daten, die durch Schlüssel zB

myPairRDD:

("sub1", "desc1") 
("sub2", "desc2") 
("sub1", "desc3") 
("sub2", "desc4") 

myPairRDD.partitionBy(new HashPartitioner(2)) 

wird:

partition 1:

("sub1", "desc1") 
("sub1", "desc3") 

Trennwand 2:

("sub2", "desc2") 
("sub2", "desc4") 

Daher sollten Sie Ihre subject s RDD wahrscheinlich wie folgt aus (beachten Sie die zusätzlichen Klammern, die ein Tupel/pair RDD erstellen) erstellt mehr werden:

val subjectTuples = data.map((_.split("\\s+")(0), _.split("\\s+")(1))) 

die Diagramme hier für weitere Informationen siehe: https://blog.knoldus.com/2015/06/19/shufflling-and-repartitioning-of-rdds-in-apache-spark/