我有一个从多个程序中读取的数据集。而不是每天多次将这个数据集读入内存,有没有办法让火花有效地缓存数据集,允许任何程序调用它?
答案 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或本地文件中,这些文件可以存在于多个应用程序中。