我在flatMap中有8个字段(field1,field2,...,field8),我想在运行时创建一个map对象 . 我想创建一个包含动态键和值元素的 Map .
例如 . 我有关键元素,如field1,field2,field3和value元素,如field6,field7 . 以下代码段完美无缺 .
val myMap = myFlatMap.map(line1 => line1 match {
case (field1,field2,field3,field4,field5,field6,field7,field8) => {
((field1,field2,field3) -> ( field6, field7))
}
但是,键和值元素是动态获得的(如命令行参数) . 如果我在数据结构中有关键元素,如String或Seq()数组,我怎么能做类似的映射
Input: 例如,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)
Output: 键,值对的映射如下 .
(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”) . 是否有一种优雅的方式来获得这些领域的一些?
任何帮助将不胜感激 .
1 回答
你应该看一下这个问题Is there way to create tuple from list(without codegeneration)?
我会遵循dhg的建议 . 您应该事先通过了解arity来尝试编写应用程序代码 .
您还可以查看spark sql和dataframes . 您可以按任意数量的键,任何字段进行分组 .