2015-04-22 27 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+")