Spark:缓存RDD / DF以在多个程序中使用

时间:2016-10-12 23:25:35

标签: scala apache-spark

我有一个从多个程序中读取的数据集。而不是每天多次将这个数据集读入内存,有没有办法让火花有效地缓存数据集,允许任何程序调用它?

2 个答案:

答案 0 :(得分:1)

RDD和数据集不能在应用程序之间共享(至少,没有官方API来共享内存)

但是,您可能对数据网格感兴趣。看看Apache Ignite。您可以将数据加载到Spark,预处理并保存到网格。然后,在其他应用程序中,您只需从Ignite缓存中读取数据即可。

有一种特殊类型的RDD,名为IgniteRDD,它允许您像使用其他数据源一样使用Ignite缓存。当然,像任何其他RDD一样,它可以转换为数据集

这将是这样的:

val rdd = igniteContext.fromCache("igniteCache")
val dataFrame = rdd.toDF

有关IgniteContext和IgniteRDD的更多信息,您可以找到here

答案 1 :(得分:0)

我认为您应该尝试checkpoint(),调用checkpoint()的RDD保存在HDFS或本地文件中,这些文件可以存在于多个应用程序中。