【问题标题】:Scala - Spark: save outcome into a fileScala - Spark:将结果保存到文件中
【发布时间】:2016-05-25 17:32:06
【问题描述】:

我正在使用 Scala API 在 Spark 中运行序列模型。这是查看结果的代码行:

model.freqSequences.collect().foreach { freqSequence => println(freqSequence.sequence.map(_.mkString("[", ", ", "]")).mkString("[", ", ", "]") + ", " + freqSequence.freq)}

问题是结果越来越大,不想再使用 collect() 而是将其保存在 HDFS 或本地的文件中。我试过这个:

scala> val outcome = model.freqSequences.foreach { freqSequence => println(freqSequence.sequence.map(_.mkString("[", ", ", "]")).mkString("[", ", ", "]") + ", " + freqSequence.freq)}

scala> outcome.saveAsTextFile("tmp/outcome1/")

error: saveAsTextFile is not a member of Unit

结果是一个单元,我无法使用 saveAsTextFile。还有其他方法可以保存这个结果吗?发送。

【问题讨论】:

标签: java scala apache-spark


【解决方案1】:

foreach 返回一个Unit

您想先将map 转换为String,以便可以另存为文件。比如:

val outcome = model.freqSequences.map { freqSequence => freqSequence.sequence.map(_.mkString("[", ", ", "]")).mkString("[", ", ", "]") + ", " + freqSequence.freq}
// print
outcome.foreach(println)
// save
outcome.saveAsTextFile("tmp/outcome1/")

【讨论】:

  • outcome.foreach(printIn) 可能无法使用多个节点提供正确的结果。由于这适用于大数据集,因此 output.take(number).foreach(printIn) 无需使用 collect() 即可提供更好的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-29
  • 2020-02-15
  • 2019-03-25
相关资源
最近更新 更多