我有一个存储一些数据的文件,每个映射器都应该使用这些数据进行一些计算。
我知道如何从文件中读取数据,这可以在mapper函数中完成,但是,这个数据对于每个mapper都是一样的,所以我想在映射过程之前将它存储在某处(变量)然后使用映射器中的内容。
如果我在map函数中执行此操作并且例如具有10行作为输入的文件,那么map函数将被调用10次,对吗?所以,如果我在地图函数中读取文件内容,我将读取10次,这是不必要的
提前致谢
答案 0 :(得分:0)
由于许多Mapper在不同的JVM(可能在不同的机器上)运行,因此在将数据提交到Hadoop之前,您无法将数据读入应用程序。但是,您可以使用Distributed Cache“有效地分发特定于应用程序的大型只读文件。”
根据该链接:“它的效率源于这样一个事实,即每个作业只复制一次文件,并且能够缓存未在存档上存档的档案。”
答案 1 :(得分:0)
如果我理解正确,您只想调用1个函数来读取文件中的所有行。假设是的,这是我对它的看法。
为了安全起见,映射器允许您一次读取1行,以便您可以控制要读取的输入行数。这需要一定的记忆力。例如,如果文件大小为1GB大小,该怎么办?你愿意阅读所有内容吗?这将占用大量内存并对性能产生影响。 这是我之前提到的安全方面。
我的结论是没有Mapper函数可以读取文件的所有内容。 你同意吗?