scala - 错误 : value saveAsTextFile is not a member of scala. collection.Map[String,Long]

标签 scala hadoop apache-spark spark-dataframe

我尝试了所有可能的方法,通过导入所有可能的库并检查与 saveAstextFile 或 saveAsSequenceFile 相关的所有问题的答案甚至没有帮助。因此启动一个新线程。 我收到错误消息“错误:值 saveAsTextFile 不是 scala.collection.Map[String,Long] countResult.saveAsTextFile("tmp/testfile") 的成员。 在尝试将 rdd 保存到HDFS。我正在按照以下步骤操作。

1.scala> import org.apache.spark.SparkFiles
import org.apache.spark.SparkFiles

2.scala> val countrdd = sc.parallelize(Array( "hadoop","spark","hadoop","spark")).map( k => (k,1))
countrdd: org.apache.spark.rdd.RDD[(String, Int)] = MapPartitionsRDD[17] at map at :28

3.scala> val countResult = countrdd.countByKey()
countResult: scala.collection.Map[String,Long] = Map(spark -> 2, hadoop -> 2)

4.scala> countResult.saveAsTextFile("tmp/testfile")
:33: error: value saveAsTextFile is not a member of scala.collection.Map[String,Long]
countResult.saveAsTextFile("tmp/testfile")

注意:我在独立集群上使用 Spark 2.X 版本。

最佳答案

saveAstextFile 这样的方法只适用于RDD。 如果它是 RDD,您可以执行任意数量的转换,然后您可以使用这样的方法

但是如果您应用了任何操作,例如countByKey,那么这样的方法将不再可用。

您可以在此处使用 reduceByKey 而不是 countByKey 您可以找到有关此的更多详细信息 here在 RDD API 示例部分下。

或者你可以试试这个代码:-

val countrdd = sc.parallelize(Array( "hadoop","spark","hadoop","spark"))
val findRDD = .map(word => (word, 1))
                 .reduceByKey(_ + _)

希望这能解决您的问题

谢谢

关于scala - 错误 : value saveAsTextFile is not a member of scala. collection.Map[String,Long],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46688246/

相关文章:

Hadoop 用 Distcp 替换 cp

apache-spark - 在 PySpark 数据框中修剪字符串列

python - 无法 pickle _thread.rlock 对象 Pyspark 向 elasticsearch 发送请求

scala - 2.7.7下编译AKKA代码时出错

hadoop - 失败 : ParseException: cannot recognize input near 'exchange' 'string' ',' in column specification

scala - 在内联执行之前将 Scala lambda 表达式包装在 block 中(使用大括号和圆括号)可以实现什么目的?

mysql - 如何将 shell 脚本参数传递给 oozie

java - newAPIHadoopRDD 任务不可序列化

scala - 使用 sass 和 compass 配置文件玩框架 2

javascript - 在 JavaScript 中将 Scala Map 转换为 Json