2015-04-22 28 views
1

我有一个hello.txt的斯卡拉读文件,分割,然后保存到VAL

hello.txt的

 [,1] 
1  2 
2  2 
5  12 
6  4 

这里是Scala代码:

val textFile = sc.textFile("/home/winsome/share/hello.txt") 
val ratings = textFile.map { line => 
    val fields = line.split(" ") 
    val (id, linksStr) = (fields(0).toInt, fields(1).toInt) 
    println(id)  //1 2 5 6 
    printlin(linkStr) //2 2 12 4 
} 

println(id)printlin(linkStr)做没有,请告诉我如何显示我想要的格式
谢谢

回答

2

您可能想试试这个: 读取文件中的所有行 按空格分隔行并将其映射到您的ID和lnkstrs中,然后将其打印出来。

val lines = io.Source.fromFile("hello.txt").getLines() 

    lines.map { x => 
     val value = x.split(" ") 
     (value.head.toInt, value.last.toInt) 
    }.foreach { z => 
     println(z._1) 
     println(z._2) 
    } 
+0

OP的使用Spark,虽然 –

0

我在您的代码中看到3个可能的问题。首先,你确定你只有空格作为分隔符吗?让我们使用任意数字的非数字:line.split("[^\\d]+")。第二,第一行[, 1] - 它有不同的结构,所以你应该删除这一行。第三个问题是您使用map进行副作用操作。 map必须是纯功能的,只能用于数据转换。用于打印到控制台使用foreach。让我们结束了:

val textFile = sc.textFile("/home/winsome/share/hello.txt") 
val ratings = textFile 
    .map (line => { 
    val fields = line.split("[^\\d]+") 
    (fields(0).toInt, fields(1).toInt) 
    }) 
    .foreach(println) 
+0

所以我应该删除'''[,1]''''?我可以通过这条线 – user2492364

+0

你可以过滤这条线textFile.filter(line =>!(line contains“[,1]”)。map(...) – ipoteka

1

假设每行是制表符分隔考虑这样的分裂,

line.split("\t") 

更简单的,没有分离的假设,分裂字母

line.split("\\W+") 

也用于提取每个单词考虑

val Array(a,b,_*) = line.split("\\W+")