Spark:更新文件

时间:2016-02-25 20:13:58

标签: apache-spark

我有一个包含字符串对列表的文件。第一对代表一个id,第二对代表一个值。

// saving
List<Tuple2> l = new ArrayList<>(0);
JavaRDD<Tuple2> rddL = javaContext.parallelize(l);
JavaPairRDD<String, String> rddPair = rddL.mapToPair(t -> t);
rddPair.saveAsTextFile(collection+".txt");

// loading
JavaPairRDD<String, String> loadedCollection = JavaPairRDD.fromJavaRDD(javaContext.objectFile(collection+".txt"));

在某些时候,我需要添加新行或更新条目。因此,我加载文件,创建一个JavaPairRDD,但它们是不可变的,因此我无法添加,删除或更改。

这样做的最佳做法是什么?我是否需要删除旧文件并在每次想要更改内容时保存一个新文件?

1 个答案:

答案 0 :(得分:0)

RDD本身不包含任何数据。 它只保存有关如何从加载的数据(即谱系)计算新数据的信息。 RDD是不可变的,并且为了更改它所代表的数据 - 您需要从中创建另一个RDD,并应用所需的转换。

  

这样做的最佳做法是什么?我是否需要删除旧文件   每次我想改变什么时保存一个新的?

不幸的是答案是肯定的。

您无法将文件中的特定条目加载到RDD对象中,然后只保存这些更改。