如何插入或更新已从外部数据库加载的spark rdd

时间:2016-05-26 06:39:37

标签: apache-spark rdd

我在mongodb有10万条记录。我已经在RDD中加载了它们的一部分,过了一段时间我得到了一条与已经加载到RDD中的数据相匹配的新记录。我需要将新记录直接添加到RDD而不是外部数据库。

2 个答案:

答案 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:

  1. 在Spark Shell中下载IndexedRDD软件包:
    usb/$ spark/bin/spark-shell --packages amplab:spark-indexedrdd:0.3 \ --repositories https://raw.githubusercontent.com/ankurdave/maven-repo/master

  2. 导入IndexedRDD包:
    import edu.berkeley.cs.amplab.spark.indexedrdd.IndexedRDD import edu.berkeley.cs.amplab.spark.indexedrdd.IndexedRDD._

  3. 然后你可以像以下一样投射你的RDD:
    val iRDD = IndexedRDD(rdd)

  4. 现在您可以在索引的RDD上插入或删除行:
    iRDD.put(0L, "New Row")
  5. 有关详细信息,请查看here