如何将RDD [(String,String)]转换为RDD [Array [String]]?

时间:2015-09-15 10:10:28

标签: scala apache-spark

我试图将文件名附加到文件中的每个记录。我想如果RDD是Array,那我就很容易做到。

转换RDD类型或解决此问题的一些帮助将非常感谢!

In(String,String)type

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

在数组(字符串)

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

我的功能:

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

1 个答案:

答案 0 :(得分:8)

如果您有RDD[(String, String)],则可以通过调用

访问第一个元组的第一个元组字段
val firstTupleField: String = myRDD.first()._1

如果您想将RDD[(String, String)]转换为RDD[Array[String]],可以执行以下操作

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

您也可以使用部分函数来构造元组:

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