как сохранить значение в файле с помощью Scala - PullRequest
1 голос
/ 09 июля 2019

Я пытаюсь сохранить значение в файле , но постоянно получаю сообщение об ошибке

Я пытался

.saveAsTextFile("/home/amel/timer")`

РЕДУКТОР Функция

val startReduce = System.currentTimeMillis() 
val y = sc.textFile("/home/amel/10MB").filter(!_.contains("NULL")).filter(!_.contains("Null"))
val er = x.map(row => {
   val cols = row.split(",")
   (cols(1).split("-")(0) + "," + cols(2) + "," + cols(3), 1)
}).reduceByKey(_ + _).map(x => x._1 + "," + x._2)
er.collect.foreach(println)

val endReduce = System.currentTimeMillis()
val durationReduce = ((endReduce-startReduce)/1000).saveAsTextFile("home/amel/timer/")

ошибка, которую я получаю, находится в этой строке

val durationReduce = ((endReduce-startReduce)/1000).saveAsTextFile("home/amel/timer/")

там написано: saveAsTextFile is not a member of Long

Вывод, который мне нужен, это число

Ответы [ 2 ]

2 голосов
/ 09 июля 2019

Long не имеет метода с именем saveAsTextFile Если вы хотите записать значение Long, есть много способов, которыми можно просто воспользоваться java PrintWriter

val duration = ((endReduce-startReduce)/1000)
new PrintWriter("ome/amel/timer/time") { write(duation.toString); close }

Если вы по-прежнемуЕсли вы хотите использовать искру RDD saveAsTextFile, тогда вы можете использовать

sc.parallelize(Seq(duration)).saveAsTextFile("path")

Но это не имеет смысла, просто записать одно значение.

2 голосов
/ 09 июля 2019

saveAsTextFile - метод для класса org.apache.spark.rdd.RDD ( документы )

Выражение ((endReduce-startReduce)/1000) имеет тип Long, поэтому у него нет этого метода, поэтому вы видите ошибку "saveAsTextFile is not a member of Long"

Этот ответ применим здесь: https://stackoverflow.com/a/32105659/8261

По сути, у вас есть Int и вы хотите записать его в файл. Ваша первая мысль - создать распределенную коллекцию в кластере машин, которая содержит только этот Int, и позволить этим машинам записывать Int в набор файлов распределенным способом.

Я бы сказал, что это неправильный подход. Не используйте Spark для сохранения Int в файл. Вместо этого вы можете использовать PrintWriter:

val out = new java.io.PrintWriter("filename.txt")
out.println(finalvalue)
out.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...