在RDD中操纵向量和列表

时间:2016-11-08 11:46:48

标签: scala apache-spark vector rdd

我是Spark和Scala的新手,我真的需要一些关于以下RDD转换的帮助:

INPUT (MACADDRESS,向量(列表(TS1,TS2),列表(TS2,TS3),列表.....)

(c8:3a:bv:b1:3a:e0,Vector(List(1472820071, 1472821088), List(1472821088, 1472821429), List(1472821429, 1472824217)))

DESIDED OUTPUT (macAddress,Vector(intvalue,intvalue,...))

(c8:3a:bv:b1:3a:e0,Vector(1472821088-1472820071, 1472821429-1472821088,1472824217-1472821429))

简而言之,我有一个已经按密钥(macAddress)分组的rdd,其中包含配对的值列表。我需要将列表矢量转换为包含从列表计算的配对差异的向量(secondElement-firstElement)。 Vector中配对列表的数量在RDD中是可变的(取决于所考虑的macAddress)

我不知道在这种情况下我必须使用哪种转换。

谢谢

2 个答案:

答案 0 :(得分:2)

你可以mapValues:

pop

答案 1 :(得分:0)

根据您的数据类型进行更新

  def flattenRDDElements(x:(macAddress,Vector[List[Int]]) ) : (macAddress,Vector[String]) = {
    x match {
      case (s,y) => (s,y.map(switchListElements))
    }
  }

  def switchListElements(x: List[Int]):String = x match {
    case a::b::Nil => b+"-"+a
  }

  rdd.map(r => flattenRDDElements(r))