我正在尝试在文件中保存一个值,但始终出现错误
我尝试过
.saveAsTextFile("/home/amel/timer")`
REDUCER功能
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
我想要的输出是数字
答案 0 :(得分:2)
saveAsTextFile
是类org.apache.spark.rdd.RDD
(docs)上的方法
表达式((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()
答案 1 :(得分:2)
Long
没有名为saveAsTextFile
的方法如果要编写Long值,有很多简单的方法是使用Java PrintWriter
val duration = ((endReduce-startReduce)/1000)
new PrintWriter("ome/amel/timer/time") { write(duation.toString); close }
如果您仍要使用spark RDD saveAsTextFile
,则可以使用
sc.parallelize(Seq(duration)).saveAsTextFile("path")
但这只是写一个值没有意义。