【问题标题】:How to convert RDD[(String, String)] into RDD[Array[String]]?如何将 RDD[(String, String)] 转换为 RDD[Array[String]]?
【发布时间】:2015-12-11 13:10:42
【问题描述】:

我正在尝试将文件名附加到文件中的每条记录。我想如果 RDD 是 Array,我会很容易做到这一点。

对于转换 RDD 类型或解决此问题的一些帮助将不胜感激!

在(字符串,字符串)类型中

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

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:

    如果你有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) }
    

    【讨论】:

    • 两个答案都为我的查询提供了解决方案。干杯!
    • 很高兴我能帮上忙 :-)
    猜你喜欢
    • 1970-01-01
    • 2020-08-17
    • 2018-11-26
    • 2021-09-28
    • 2018-04-05
    • 1970-01-01
    • 2018-07-06
    • 1970-01-01
    • 2017-01-29
    相关资源
    最近更新 更多