2012-07-11 41 views
6

Tôi đang viết một hàm bản đồ bằng cách sử dụng mrjob. Đầu vào của tôi sẽ đến từ các tệp trong một thư mục trên HDFS. Tên của các tập tin chứa một thông tin mảnh nhỏ nhưng rất quan trọng mà không có trong các tập tin. Có cách nào để tìm hiểu (bên trong một hàm bản đồ) tên của tệp đầu vào mà từ đó một cặp khóa-giá trị đã cho không?Cách lấy tên của tệp đầu vào trong MRjob

Tôi đang tìm kiếm một tương đương với mã Java này:

FileSplit fileSplit = (FileSplit)reporter.getInputSplit(); 
String fileName = fileSplit.getPath().getName(); 

Cảm ơn trước!

Trả lời

6

map.input.file thuộc tính sẽ cung cấp tên tệp đầu vào.

Theo Hadoop - The Definitive Guide

Các thuộc tính có thể được truy cập từ cấu hình của công việc, thu được trong API MapReduce cũ bằng cách cung cấp một thực hiện các phương pháp cấu hình() cho Mapper hoặc giảm, nơi cấu hình được thông qua như một đối số. Trong API mới, các thuộc tính này có thể được truy cập từ đối tượng ngữ cảnh được truyền cho tất cả các phương thức của Mapper hoặc Reducer.

+1

Và biết thêm chi tiết có thể được tìm thấy từ câu trả lời trước Praveen của một câu hỏi tương tự như sau - http://stackoverflow.com/ câu hỏi/7449756/get-input-file-name-in-streaming-hadoop-program –

+4

Cảm ơn, @PraveenSripati và @ChrisWhite, đây chính xác là những gì tôi cần! Để tuyên bố rõ ràng đối với các khách truy cập trong tương lai: 'fileName = os.environ ['map_input_file']' thực hiện thủ thuật. – Bolo

5

Nếu bạn đang sử dụng Hadoop 2.x với Python:

file_name = os.environ['mapreduce_map_input_file'] 
+0

Những thứ này được liệt kê ở đâu đó trực tuyến hay tôi phải duyệt qua mã nguồn để tìm chúng? – masu

+1

tính năng này không hoạt động – Dinesh

Các vấn đề liên quan