繁体   English   中英

Hadoop Streaming Python多个输入文件单个映射器

[英]Hadoop Streaming Python Multiple Input Files Single Mapper

我只有一个映射器。

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

我需要通过具有-input file1和另一个-input file2的hadoop流API调用此映射器。

我该如何实现? 我怎么知道hadoop流给我的STDIN中的哪一行属于哪个文件?

UPDATE

File1

Fruit, Vendor, Cost

Oranges, FreshOrangesCompany, 50
Apples, FreshAppleCompany, 100

File2

Vendor, Location, NumberOfOffices

FreshAppleCompany, NewZealand, 45
FreshOrangeCompany, FijiIslands, 100

我需要做的是打印出他们出售橘子的办事处数量。

Oranges 100

因此,两个文件都需要INPUT到映射器。

映射器python代码内的os.environ["map.input.file"]应提供映射器正在处理的块的文件名。

这个问题有点模棱两可,因为就文件的目的而言,没有提供太多细节。 所以我做一些假设

  • 如果file1和file2只是两组数据文件且具有相同类型的数据,并且您需要确保对文件进行了处理...则只需将文件复制到HDFS文件夹中,并确保将该文件夹标识为输入文件夹,你就很好。 来自这两个文件的数据将用于调用映射器...

  • 如果是,file1和file2具有不同的用途。 例如,file1是映射器的输入文件,而file2是某些联接或其他内容需要引用的文件,然后是分布式缓存。 使用多个输入检查此Hadoop流

  • 如果file1和file2都是输入文件并且是相关的,则需要进行联接。 如果file1或file2很小,则可以使用常规文件或归档文件将其用作分布式缓存。 但是,如果两个文件都很大,则可能会有些复杂,因为您可能必须执行多个MR或将文件转换为Hive可以使用的格式,并使用hive联接,然后将联接结果用作输入到您的Python Mapper作业。

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM