在Hadoop中,您可以使用分布式缓存在每个节点上复制只读文件。在Spark中这样做的等效方法是什么?我知道广播变量,但这只适用于变量,而不是文件。
答案 0 :(得分:6)
看一下SparkContext.addFile()
在每个节点上添加要使用此Spark作业下载的文件。传递的路径可以是本地文件,HDFS(或其他Hadoop支持的文件系统)中的文件,也可以是HTTP,HTTPS或FTP URI。要在Spark作业中访问该文件,请使用SparkFiles.get(fileName)查找其下载位置。
如果recursive选项设置为true,则可以给出目录。目前,目录仅支持Hadoop支持的文件系统。
答案 1 :(得分:-3)
如果您的文件是文本文件,生活在HDFS中,那么,您可以使用:
textFile("<hdfs-path>")
&#34; SparkContext &#34;。
此调用将为您提供一个RDD,您可以使用以下方法保存节点:&#34; persist()
&#34;那个RDD。
此方法可以在MEMORY / DISK中保留文件数据(序列化/反序列化)。
参考:
http://spark.apache.org/docs/latest/programming-guide.html#which-storage-level-to-choose