我正在使用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()