如何从文本文件中以RDD [Long,List [Long]]的形式从文件中读取值?

时间:2019-03-25 16:58:41

标签: scala apache-spark

我是Scala和函数式编程的新手,我正尝试从文本文件中将无向图读入Scala。文本文件的格式为:

1,8,9,10 2,5,6,7 3,1,2

代表节点1连接到节点8,9和10(邻接列表),节点2连接到节点5,6和7,依此类推。

我正在尝试将它们阅读为 RDD [1,包含所有相邻节点的列表]

var graphNodes = sc.textFile(*path to file*).map( line => { val a = line.split(",")
                                                                ( a(0).toLong, a(1).toLong )  }  )

当我只读取第一个相邻值时,这将给我RDD [1,8]。

有人可以帮助我还是为我提供一些资源?

1 个答案:

答案 0 :(得分:2)

假设您每行有一条记录,例如

sc.parallelize(List("1,8,9,10", "2,5,6,7", "3,1,2"))
  .map(_.split(",").map(_.toLong))
  .map {
    case Array(head, tail @ _*) => (head, tail)
  }.foreach(println)

输出:

(2,Vector(5, 6, 7))
(3,Vector(1, 2))
(1,Vector(8, 9, 10))