2015-09-15 24 views
5

Tôi đang cố gắn thêm tên tệp vào mỗi bản ghi trong tệp. Tôi nghĩ rằng nếu RDD là Array nó sẽ được dễ dàng cho tôi để làm điều đó.Làm thế nào để chuyển đổi RDD [(String, String)] thành RDD [Array [String]]?

Một số trợ giúp chuyển đổi loại RDD hoặc giải quyết vấn đề này sẽ được nhiều người đánh giá cao!

Trong (String, String) gõ

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

Trong Mảng (string)

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

chức năng của tôi:

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

Trả lời

8

Nếu bạn có một RDD[(String, String)], bạn có thể truy cập trường tuple đầu tiên của bộ tuple đầu tiên bằng cách gọi

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

Nếu bạn muốn chuyển đổi một RDD[(String, String)] thành một RDD[Array[String]] bạn có thể làm như sau

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

Bạn cũng có thể sử dụng một chức năng một phần destructure các tuples:

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

Cả hai câu trả lời cung cấp giải pháp cho sự truy vấn của tôi. Chúc mừng! – WoodChopper

+0

Vui vì tôi có thể giúp :-) –

Các vấn đề liên quan