我在mongodb有10万条记录。我已经在RDD中加载了它们的一部分,过了一段时间我得到了一条与已经加载到RDD中的数据相匹配的新记录。我需要将新记录直接添加到RDD而不是外部数据库。
答案 0 :(得分:1)
只需使用您要添加的值创建新的RDD
,然后使用RDD.union
。类似的东西:
var rdd: RDD[T] = ...
rdd = rdd.union(sc.makeRDD(Array[T](...)))
答案 1 :(得分:0)
在Spark中,RDD是不可变的。创建RDD后,它就不能再被更改了。
来自paper of RDD:
正式地,RDD是一个只读的分区记录集合。 RDD只能通过确定性操作来创建 稳定存储或其他RDD中的数据。
因此,如果要在RDD中插入行,唯一的方法是使用旧RDD中的新行和数据创建新的RDD。
= =============================更新============= ================
如果您想使用IndexedRDD:
usb/$ spark/bin/spark-shell --packages amplab:spark-indexedrdd:0.3 \
--repositories https://raw.githubusercontent.com/ankurdave/maven-repo/master
import edu.berkeley.cs.amplab.spark.indexedrdd.IndexedRDD
import edu.berkeley.cs.amplab.spark.indexedrdd.IndexedRDD._
val iRDD = IndexedRDD(rdd)
iRDD.put(0L, "New Row")
有关详细信息,请查看here