如何传递数据一次将一个rdd分成两个输出

时间:2015-10-31 08:37:13

标签: apache-spark

我正在使用spark来处理以下数据:

A121
Bword
A342
Bhello

即,以“A”开头的行包含数字,否则包含单词。

现在我需要输出包含单词的行。然后计算数字线的最大值。

即:

myrdd.filter(_.startsWith("B")).saveAsTextFile("mytxt")
val max_value = myrdd.filter(_.startsWith("A")).map(_.substring(1)).max()

但是这个方法传递myrdd两次,所以我必须缓存myrdd,我不想缓存它!

是否有一些方法只传递一次数据?

例如,像这样:

val max_value = myrdd.flatMap{s =>
  if (s.startsWith("B")) {
    write_to_file(s)
    Iterator.empty()  // write to hdfs
  } else {
    Iterator.single(s.substring(1).toInt) 
  }
}.max()

0 个答案:

没有答案