错误:值saveAsTextFile不是Unit - Spark的成员

时间:2016-10-26 22:15:39

标签: scala apache-spark

我尝试使用以下方法将结果保存到文本文件中:

results.collect().foreach { rule => println("[" + rule.antecedent.mkString(",") + "=>" + rule.consequent.mkString(",") + "]," + rule.confidence)}.saveAsTextFile("/user/cloudera/rules")

但我收到了这个错误:

<console>:43: error: value saveAsTextFile is not a member of Unit
              results.collect().foreach { rule => println("[" + rule.antecedent.mkString(",") + "=>" + rule.consequent.mkString(",") + "]," + rule.confidence)}.saveAsTextFile("/user/cloudera/rules")

我需要改变什么?我不明白错误......

3 个答案:

答案 0 :(得分:0)

foreach操作返回Unit,它是空返回值的替代值:

scala> val a = (0 to 5).foreach(println)
0
1
2
3
4
5
a: Unit = ()

如果您想保存原始results,则需要使用以下内容:

results.collect.saveAsTextFile(...)

否则,如果您尝试将操作应用于results.collect的每个元素,然后保存结果,那么您将需要使用map并对每个元素执行其他操作(因为{{ 1}}也会返回print)。

答案 1 :(得分:0)

如果您想节省使用:

results.map { rule => 
     "[" + rule.antecedent.mkString(",") + "=>" + rule.consequent.mkString(",") + "]," + rule.confidence
}.saveAsTextFile("/user/cloudera/rules")

答案 2 :(得分:0)

当我使用spark.read而不是sc初始化变量时,我得到了相同的错误消息。其中一个返回不具有DataSet方法的saveAsTextFile,另一个返回具有RDD的RDD。希望对别人有帮助。