【问题标题】:Spark - How to create a map with selective fields from a flatMapSpark - 如何使用 flatMap 中的选择性字段创建地图
【发布时间】:2016-03-22 00:01:08
【问题描述】:

我在 flatMap 中有 8 个字段(field1、field2、...、field8),我想在运行时创建一个地图对象。我想创建一个包含动态键和值元素的地图。

例如。我有 field1、field2、field3 等关键元素和 field6、field7 等值元素。下面的 sn-p 工作得很好。

val myMap = myFlatMap.map(line1 => line1 match {
      case (field1,field2,field3,field4,field5,field6,field7,field8) => {

        ((field1,field2,field3) -> ( field6, field7))
      }

但是,键和值元素是动态获取的(如命令行参数)。如果我在数据结构(如 String 或 Seq() 数组)中有关键元素,我该如何做一个类似的映射

输入: 例如,myFlatMap 有以下数据: (field1_row1,field2_row1,field3_row1,field4_row1,field5_row1,field6_row1,field7_row1,field8_row1) (field1_row2,field2_row2,field3_row2,field4_row2,field5_row2,field6_row2,field7_row2,field8_row2) (field1_row3,field2_row3,field3_row3,field4_row3,field5_row3,field6_row3,field7_row3,field8_row3)

输出:如下的键值对映射。

(field1_row1,field2_row1,field3_row1) -> (field6_row1, field7_row1) (field1_row2,field2_row2,field3_row2) -> (field6_row2, field7_row2) (field1_row3,field2_row3,field3_row3) -> (field6_row3, field7_row3)

在上面的例子中,输出映射的键是(field1,field2,field3),值是(field6,field7)。并非每次运行作业都是如此。

在第二次运行中,我可能只需要映射 (field1,field2) -> field8 并忽略输入 flatMap 中的所有其他字段。在第三次运行中,我想用 (field2,field4) -> (field7,field8) 创建输出映射

我在变量 keyFields=List("field1","field3","field5") 中有输入字段。有没有优雅的方法 获取仅这些字段中的一些?

任何帮助将不胜感激。

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:

    你应该看看这个问题Is there way to create tuple from list(without codegeneration)?

    不过,我会听从 dhg 的建议。你真的应该通过提前了解arity来尝试编写你的应用程序。

    您还可以查看 spark sql 和数据帧。您可以按任意数量的键、任意数量的字段进行分组。

    【讨论】:

    • 但是,它并不能帮助我从列表中获取选择性参数并形成一些。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-21
    • 1970-01-01
    • 2019-04-25
    • 2010-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多