我有一个要求,我只需转置每个RDD行元素的某些元素。我有下面的输入文件。
sno|fname |lname |f1 |f2 |f3 |f4
1 |sunil |kumar |500|1000|2000|3000
2 |mahesh|kalani|600|700 |800 |1000
我需要如下的oputput。
1|sunil |kumar |f1|500
1|sunil |kumar |f2|1000
1|sunil |kumar |f3|2000
1|sunil |kumar |f4|3000
2|mahesh|kalani|f1|600
2|mahesh|kalani|f2|700
2|mahesh|kalani|f3|800
2|mahesh|kalani|f4|1000
如何在RDD上编写映射器函数来获取输出?
答案 0 :(得分:0)
您可以使用flatMap
:
rdd.flatMap {
case (sno, fname, name, f1, f2, f3, f4) =>
List("f1", "f2", "f3", "f4").zip(List(f1, f2, f3, f4)).map {
case (k, v) => (sno, fname, name, k, v)
}
}
这假设您已经删除了标题行,并将每个行解析为元组。
修改强>
要将每一行解析为元组,您可以执行以下操作:
rawRdd.map(row => row.split("|") match {
case Array(sno, fname, name, f1, f2, f3, f4) => (sno, fname, name, f1, f2, f3, f4)
}
请注意,您也可以将这两个步骤合并为一个,仅使用flatMap
。