2015-09-15 13 views
5

Próbuję dodać nazwę pliku do każdego rekordu w pliku. Pomyślałem, że jeśli RDD to Array, byłoby mi łatwo to zrobić.Jak przekonwertować RDD [(String, String)] na RDD [Array [String]]?

Pewna pomoc przy konwersji typu RDD lub rozwiązaniu tego problemu byłaby bardzo cenna!

W (String, String) typ

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

w szyku (string)

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

Moja funkcja:

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)) 
      } 
     } 
} 

Odpowiedz

8

Jeśli masz RDD[(String, String)], można uzyskać dostęp do pierwsze pole krotki pierwszej krotki, wywołując

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

Jeśli chcesz przekonwertować RDD[(String, String)] w RDD[Array[String]] można wykonać następujące czynności

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

Można również stosować częściowe funkcję destructure na krotki:

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

obie odpowiedzi dostarcza rozwiązania moje zapytanie. Twoje zdrowie! – WoodChopper

+0

Cieszę się, że mogłem pomóc :-) –

Powiązane problemy