2015-09-15 27 views
5

Ich versuche, einen Dateinamen an jeden Datensatz in der Datei anzuhängen. Ich dachte, wenn die RDD Array ist, wäre es leicht für mich gewesen, es zu tun.Wie konvertiert man RDD [(String, String)] in RDD [Array [String]]?

Einige Hilfe bei der Konvertierung RDD-Typ oder die Lösung dieses Problems wäre sehr willkommen!

In (String, String) Typ

scala> myRDD.first()(1)  
scala><console>:24: error: (String, String) does not take parametersmyRDD.first()(1) 

In Array (string)

scala> myRDD.first()(1)  
scala> res1: String = abcdefgh 

Meine Funktion:

def appendKeyToValue(x: Array[Array[String]){ 
    for (i<-0 to (x.length - 1)) { 
     var key = x(i)(0) 
     val pattern = new Regex("\\.") 
     val key2 = pattern replaceAllIn(key1,"|") 
     var tempvalue = x(i)(1) 
     val finalval = tempvalue.split("\n") 
     for (ab <-0 to (finalval.length -1)){ 
      val result = (I am trying to append filename to each record in the filekey2+"|"+finalval(ab)) 
      } 
     } 
} 

Antwort

8

Wenn Sie eine RDD[(String, String)] haben, können Sie den Zugriff auf erstes Tupelfeld des ersten Tupels durch Aufruf

val firstTupleField: String = myRDD.first()._1 

Wenn Sie eine RDD[(String, String)] in eine RDD[Array[String]] konvertieren möchten, können Sie die folgende

val arrayRDD: RDD[Array[String]] = myRDD.map(x => Array(x._1, x._2)) 

Sie auch eine Teilfunktion verwenden kann, die Tupel destrukturiert:

val arrayRDD: RDD[Array[String]] = myRDD.map { case (a,b) => Array(a, b) } 
+0

Beide Antworten liefert Lösung meine Frage. Prost! – WoodChopper

+0

Ich bin froh, dass ich helfen konnte :-) –

Verwandte Themen