错误:值saveAsTextFile不是scala.collection.Map的成员[String,Long]

时间:2017-10-11 12:28:28

标签: 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版本。

1 个答案:

答案 0 :(得分:2)

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

如果您已应用任何action countByKey,那么此类方法将不再可用。

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

或者您可以尝试以下代码: -

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

希望这能解决你的问题

由于