我只有一个制图器。
for line in sys.stdin:
#if line is from file1
#process it based on some_arbitrary_logic
#emit k,v
#if line is from file2
#process it based on another_arbitrary_logic
#emit k, v
我需要通过hadoop流式api调用这个Map器 -input file1
还有一个 -input file2
.
我如何做到这一点?我怎么知道哪一行属于 STDIN
hadoop流媒体给了我什么?
更新
File1
Fruit, Vendor, Cost
Oranges, FreshOrangesCompany, 50
Apples, FreshAppleCompany, 100
File2
Vendor, Location, NumberOfOffices
FreshAppleCompany, NewZealand, 45
FreshOrangeCompany, FijiIslands, 100
我需要做的是打印出他们在多少办公室卖桔子。 Oranges 100
.
所以两个文件都需要 INPUT
给Map绘制者。
2条答案
按热度按时间0pizxfdo1#
os.environ["map.input.file"]
在Map器内部,python代码应该给出Map器正在处理的块的文件名。6mzjoqzu2#
这个问题有点模棱两可,因为就档案的目的而言,没有提供多少细节。所以我做了一些假设
如果file1和file2只是两组数据文件,并且具有相同的数据类型,那么您只需要确保文件已被处理。。。然后只需将文件复制到hdfs文件夹中,并确保该文件夹被标识为input folder,您就可以了。两个文件中的数据将用于调用Map程序。。。
如果文件1和文件2有不同的用途。例如,file1是mapper的输入文件,而file2是一些连接等需要引用的文件,然后是分布式缓存。检查这个具有多个输入的hadoop流
如果file1和file2都是输入文件并且是相关的,则需要进行连接。如果file1或file2很小,则可以使用常规文件或归档文件将其用作分布式缓存。但是,如果两个文件都很大,则会稍微复杂一些,因为您可能需要执行多个mr或将文件转换为可以由配置单元使用的格式,然后使用配置单元联接,然后将联接结果用作pythonMap器作业的输入。
希望这有帮助。