首页 文章

展平RDD - 键值对的值中的嵌套列表

提问于
浏览
0

我花了一段时间才弄明白这一点,我想分享我的解决方案 . 绝对欢迎改进 .

参考文献:Flattening a Scala Map in an RDDSpark Flatten Seq by reversing groupby, (i.e. repeat header for each sequence in it)

我有一个表格的RDD:RDD [(Int,List [(String,List [(String,Int,Float)])])]

关键:Int

值:List [(String,List [(String,Int,Float)])]

目标是展平为:RDD [(Int,String,String,Int,Float)]

binHostCountByDate.foreach(println)

举个例子:

(516361, List((2013-07-15, List((s2.rf.ru,1,0.5), (s1.rf.ru,1,0.5))), (2013-08-15, List((p.secure.com,1,1.0)))))

最终的RDD应该给出以下内容

(516361,2013-07-15,s2.rf.ru,1,0.5)
(516361,2013-07-15,s1.rf.ru,1,0.5)
(516361,2013-08-15,p.secure.com,1,1.0)

2 回答

  • 0

    我的方法如下:

    我弄平了第一个键值对 . 这“删除”了第一个列表 .

    val binHostCountForDate = binHostCountByDate.flatMapValues(identity)
    

    给我一个表格的RDD:RDD [(Int,(String,List [(String,Int,Float)])]

    binHostCountForDate.foreach(println)
    
    (516361,(2013-07-15,List((s2.rf.ru,1,0.5), (s1.rf.ru,1,0.5))))
    (516361,(2013-08-15,List(p.secure.com,1,1.0))
    

    现在我将前两个项映射到一个元组中,创建一个新键,第二个元组作为值 . 然后应用与上面相同的步骤来展平新的键值对 .

    val binDataRemapKey = binHostCountForDate.map(f =>((f._1, f._2._1), f._2._2)).flatMapValues(identity)
    

    这给出了扁平的RDD:RDD [(Int,String),(String,Int,Float)]

    如果这个表格没问题,那么我们就完成了,但我们可以更进一步,删除元组以获得我们最初寻找的最终形式 .

    val binData = binDataRemapKey.map(f => (f._1._1, f._1._2, f._2._1, f._2._2, f._2._3))
    

    这给了我们最终的形式:RDD [(Int,String,String,Int,Float)]

    我们现在有一个扁平的RDD,它保留了每个列表的父级 .

  • 2

    这是一个简单的单行(并且在for-understanding中有解构,我们可以使用比_1,_2._1等更好的名称,这样可以更容易确保我们得到正确的结果

    // Use a outer list in place of an RDD for test purposes
    val t = List((516361,
                     List(("2013-07-15", List(("s2.rf.ru,",1,0.5), ("s1.rf.ru",1,0.5))),
                          ("2013-08-15", List(("p.secure.com,",1,1.0))))))
    
    t flatMap {case (k, xs) => for ((d, ys) <- xs; (dom, a,b) <-ys) yield (k, d, dom, a, b)}
       //> res0: List[(Int, String, String, Int, Double)] = 
           List((516361,2013-07-15,s2.rf.ru,,1,0.5),
                (516361,2013-07-15,s1.rf.ru,1,0.5),
                (516361,2013-08-15,p.secure.com,,1,1.0))
    

相关问题