【问题标题】:scala flatmap to get correct data structurescala flatmap 以获得正确的数据结构
【发布时间】:2015-08-11 03:25:39
【问题描述】:

我已经解析了数据并生成了以下 RDD:

x [RDD] = (458817,(CompactBuffer(20),CompactBuffer((837063182,0,1433142639864), (676690466,0,1433175090184), (4642913327036075112,1,1433177284025), (464291332,1,1433182403135), (4642913327036075112,0,1433185531150), 
(464291332,0,1433186067803), (4642913327036075112,1,1433186266561), (851805971,0,1433190829047), 
(6376558263039679112,1,1433203286945), (837063182,0,1433226615856), (8403476884799939112,0,1433287740066), 
(764990231,0,1433289484047), (4642913327036075112,0,1433351165901), (464291332,1,1433351892238), 
(4642913327036075112,0,1433374808826), (584492430,1,1433436093253))))

这里我只显示 RDD 中的记录,我的目标是获得以下 RDD:我附加第一个元素的位置。

(458817,837063182,0,1433142639864) 
(458817,676690466,0,1433175090184) 
(458817,464291332,1,1433177284025) 
(458817,464291332,1,1433182403135) 
(458817,464291332,0,1433185531150) 
(458817,464291332,0,1433186067803) 
(458817,464291332,1,1433186266561) 
(458817,851805971,0,1433190829047) 
(458817,637655826,1,1433203286945) 
(458817,837063182,0,1433226615856)

通过执行 flatMap,我丢失了第一个元素并且无法访问它:

val r = x.map(l => l._2).flatMap(x => x._2).map(x => (x._1, x._2, x._3, x._4))

【问题讨论】:

    标签: scala flatmap


    【解决方案1】:

    这可能会给你想要的结果:

    val r = for {
      el <- Seq(x._1)
      (el1, el2, el3) <- x._2._2
    } yield (el, el1, el2, el3)
    

    将第一个元素提升到 Sequence 以在 for 表达式中使用它。 拉出第二个CompactBuffer 并产生所需的元组。

    【讨论】:

    • 在地图内开始..?
    • 问题是这不会给我一个 rdd 对..?它在此之后给出了一个列表,我无法访问每个元素,例如:el1,el2.... 稍后
    • 呼……好问题。但是由于这基本上使用了map和flatmap,它应该生成相同的集合类型(CompactBuffer)。也许您需要将第一个元素提升到 CompactBuffer 而不是 Sequence。不太确定如何做到这一点。没有带火花的测试环境。所以无法真正测试它。
    • 是的解决方案可能应该将其发布为答案:)
    【解决方案2】:

    这给了我想要的确切结构。

    val s = r.map(x => (x._2._2).map(y => (x._1, y._1, y._2.toInt, y._3, y._4))).flatMap(k => k)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-08
      • 1970-01-01
      相关资源
      最近更新 更多