Номер строки смены искры - PullRequest
0 голосов
/ 12 октября 2018

Я новичок в искре.У меня есть вопрос, что существует такой файл, как first pic Первое число каждой строки - это номер строки, остальные - наборы.Мне просто нужно изменить номер строки, например, изменить номер всей строки плюс 1 на секунда Что мне делать?Спасибо!

Ответы [ 4 ]

0 голосов
/ 13 октября 2018

Использование сопоставления с образцом ..

scala> val a = scala.io.Source.fromFile("data.txt").getLines.toList
a: List[String] = List(0 1 3 4, 1 2 5 7 8, 2 3 4, 3 1)

scala> val pat = "(^\\d+)(.+)".r
pat: scala.util.matching.Regex = (^\d+)(.+)

scala> val c = a.map(p=> p match { case pat(x,y) => x.toInt+1+y } )
c: List[String] = List(1 1 3 4, 2 2 5 7 8, 3 3 4, 4 1)

scala> c.foreach(println)
1 1 3 4
2 2 5 7 8
3 3 4
4 1

scala>
0 голосов
/ 12 октября 2018

Сначала прочитайте ваши данные в кадре данных, затем просто выполните преобразование в первом столбце, добавив к нему 1

val df = spark.read....
val df1 = df.withColumn("firstcolumn", $"firstcolumn"+1)
df1.show

Например,

scala> val df = Seq((0,1),(1,2),(2,3)).toDF("c1","c2")
df: org.apache.spark.sql.DataFrame = [c1: int, c2: int]

scala> df.show
+---+---+
| c1| c2|
+---+---+
|  0|  1|
|  1|  2|
|  2|  3|
+---+---+


scala> df.withColumn("c1",$"c1"+1).show
+---+---+
| c1| c2|
+---+---+
|  1|  1|
|  2|  2|
|  3|  3|
+---+---+
0 голосов
/ 12 октября 2018
val s = scala.io.Source.fromFile("C:\\scala\\txt\\firstPic.txt").getLines.toList
val s1 = s.map(x=>x.split(" ").toList).map(v=>v.map(_.toInt)).
         map{case Nil => Nil; case h::t => h+1::t}

После этого мы можем построить кадр данных из списка s1

Тест в REPL:

scala> val s = scala.io.Source.fromFile("C:\\scala\\txt\\firstPic.txt").getLines.toList
s: List[String] = List(0 1 3 4, 1 2 5 7 8, 2 3 4, 3 1)
scala> val s1 = s.map(x=>x.split(" ").toList).map(v=>v.map(_.toInt)).map{case Nil => Nil;case h::t => h+1::t}
s1: List[List[Int]] = List(List(1, 1, 3, 4), List(2, 2, 5, 7, 8), List(3, 3, 4), List(4, 1))

scala> s.foreach(x=>println(x))
0 1 3 4
1 2 5 7 8
2 3 4
3 1

scala> s1.foreach(x=>println(x.mkString(" ")))
1 1 3 4
2 2 5 7 8
3 3 4
4 1
0 голосов
/ 12 октября 2018

В Spark RDD и Dataframes являются неизменными, то есть вы не можете их изменить.То, что вы можете сделать, это применить преобразования и создать новые.

По звуку вы хотите применить map, что позволит вам преобразовать каждую строку, как вы считаете нужным.Это очень базовое преобразование, для которого вы можете найти множество примеров в документации .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...