第一列为" key"然后添加其余每列的值

时间:2017-04-24 10:56:14

标签: scala apache-spark

第一列为" key"然后添加其余每列的值

实际上源数据文件多了22列

仅作为示例: 源文件(列分隔符是一个空格):

a 1 2 3
b 1 2 3
a 2 3 4
b 3 4 5

期望的输出:

a 3 5 7
b 4 6 8

val data = scala.io.Source.fromFile(" /root/1.txt")。getLines

data.toList

下一步怎么办? THX

1 个答案:

答案 0 :(得分:1)

解决此任务的一般算法:

  1. 按分隔符
  2. 拆分每一行
  3. 按第一列分组行
  4. 从每行删除第一列
  5. 将所有字符串转换为数字
  6. 总和
  7. 打印结果
  8. 使用普通的Scala:

    val data = List("a 1 2 3", "b 1 2 3", "a 2 3 4", "b 3 4 5")
    data.map(_.split(" ")) // 1
      .groupBy(_.head) // 2
      .mapValues(
        _.map(
          _.tail // 3
            .map(_.toInt)) // 4
          .reduce((a1, a2) => a1.zip(a2).map(tuple => tuple._1 + tuple._2))) // 5
      .foreach(pair => println(s"${pair._1} ${pair._2.mkString(" ")}")) // 6