2015-04-22 5 views
1

У меня есть hello.txtScala прочитать файл и разделить, а затем сохранить в Валу

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

Возможно, вы захотите попробовать: Чтение всех строк из вашего файла Разделите строку пробелом и нарисуйте карту в свои идентификаторы и 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 (строка =>! (Строка содержит« [, 1] »). Map (...)' – ipoteka

1

Предполагая, что каждую строку разделенной табуляции рассмотреть расщепление как это,

line.split("\t") 

Еще проще, без предположений сепараторов, сплит буквенно-цифровых слов,

line.split("\\W+") 

Также для извлечения каждого слово считать

val Array(a,b,_*) = line.split("\\W+") 
Смежные вопросы