如何将rdd同时保存到不同的S3存储桶中

时间:2017-12-05 18:16:19

标签: scala apache-spark apache-spark-sql spark-dataframe hadoop2

我想知道如何将计算的rdd保存到不同的位置。 同样扩展它以便在没有计算的情况下通知。

rdd = <do some action>

我知道rdd.saveAstextFile("s3://<location1>")将存储到location1, 但如果我想存储到location2也该怎么做? 我不确定persist/cache(我的理解是主节点中的cache/persist)是否会起作用rdd大小非常大。

请帮忙。

1 个答案:

答案 0 :(得分:0)

  

我的理解是它会在主节点中缓存/持久化。

你在哪里找到这个?这是不正确的。根据下面的火花文档说明。

  

Spark中最重要的功能之一是跨操作在内存中持久化(或缓存)数据集。当您持久保存RDD时,每个节点都会存储它在内存中计算的任何分区,并在该数据集(或从中派生的数据集)的其他操作中重用它们。这使得未来的行动更快(通常超过10倍)。缓存是迭代算法和快速交互使用的关键工具。

此外,

  

cache()方法是使用默认存储级别的简写,即StorageLevel.MEMORY_ONLY

即cache()类似于persist(StorageLevel.MEMORY_ONLY)。 请按照此链接确定根据您的要求使用哪个存储级别。 https://spark.apache.org/docs/2.1.0/programming-guide.html#which-storage-level-to-choose

您可以使用以下方式在两个位置保存:

rdd.cache()
rdd.saveAstextFile("s3://<location1>")
rdd.saveAstextFile("s3://<location2>")

详情请见https://spark.apache.org/docs/2.1.0/programming-guide.html#rdd-persistence