【发布时间】:2015-09-11 09:37:26
【问题描述】:
在 Hadoop 中,您可以使用分布式缓存在每个节点上复制只读文件。在 Spark 中这样做的等效方法是什么?我知道广播变量,但这仅适用于变量,而不适用于文件。
【问题讨论】:
-
为什么可以在列表或地图中加载文件然后广播??
标签: java scala hadoop apache-spark
在 Hadoop 中,您可以使用分布式缓存在每个节点上复制只读文件。在 Spark 中这样做的等效方法是什么?我知道广播变量,但这仅适用于变量,而不适用于文件。
【问题讨论】:
标签: java scala hadoop apache-spark
看看 SparkContext.addFile()
在每个节点上添加要与此 Spark 作业一起下载的文件。传递的路径可以是本地文件、HDFS(或其他 Hadoop 支持的文件系统)中的文件,也可以是 HTTP、HTTPS 或 FTP URI。要在 Spark 作业中访问文件,请使用 SparkFiles.get(fileName) 查找其下载位置。
如果 recursive 选项设置为 true,则可以给出一个目录。目前只有 Hadoop 支持的文件系统支持目录。
【讨论】:
如果您的文件是文本文件,位于 HDFS 中,那么,您可以使用:
textFile("<hdfs-path>") of "SparkContext"。
此调用将为您提供一个 RDD,您可以通过使用该 RDD 的方法:“persist()”来跨节点保留它。
此方法可以将文件数据(序列化/反序列化)保存在 MEMORY/DISK 中。
参考:
http://spark.apache.org/docs/latest/programming-guide.html#which-storage-level-to-choose
【讨论】: