2016-08-11 18 views
5

Tôi biết câu hỏi này đã được hỏi trước nhưng tôi không thể nhận được câu trả lời rõ ràng.Tên tệp đầu ra Spark và nối thêm vào viết

result.saveAsTextFile(path); 
  1. khi sử dụng tia lửa saveAsTextFile đầu ra sẽ được lưu với tên gọi "part-00", "bán 01" vv Có thể thay đổi tên này để đặt tên tùy chỉnh?

  2. Có thể lưu tệp saveAsTextFile vào tệp hiện có thay vì ghi đè lên tệp đó không?

Tôi đang sử dụng Java 7 cho mã hóa, hệ thống tập tin đầu ra sẽ là đám mây (Azure, Aws)

+0

theo thiết kế là các tệp được phân tách. bạn luôn có thể hợp nhất chúng vào một tệp đơn http://stackoverflow.com/questions/5700068/merge-output-files-after-reduce-phase – Aravind

+0

Bạn có thể làm điều đó với một OutputFormat tùy chỉnh, nhưng nó sẽ là một chút cố gắng. Tên tệp đến từ sâu trong hệ thống ghi tệp. Tôi sẽ đề nghị bạn chỉ chấp nhận các tên tập tin như họ đang có. Và để truy cập tập tin bạn có thể làm sc.textFile (filepath). Điều đó sẽ hiệu quả. Để hợp nhất các phân vùng được chia thành một tệp duy nhất, bạn có thể sử dụng kết hợp. –

+0

Cảm ơn, mọi nhận xét về cách thêm vào tệp – duck

Trả lời

0

1) Không có hỗ trợ trực tiếp trong phương pháp saveAsTextFile để kiểm soát tên tập tin đầu ra. Bạn có thể thử sử dụng saveAsHadoopDataset để kiểm soát tên tệp đầu ra.

ví dụ: thay vì part-00000 bạn có thể nhận được yourCustomName-00000.

Hãy nhớ rằng bạn không thể kiểm soát hậu tố 00000 bằng phương pháp này. Nó là một cái gì đó tia lửa tự động gán cho mỗi phân vùng trong khi viết để mỗi phân vùng ghi vào một tập tin duy nhất.

Để kiểm soát điều đó như đã đề cập ở trên trong các nhận xét, bạn phải viết tùy chỉnh OutputFormat của riêng mình.

SparkConf conf=new SparkConf(); 
conf.setMaster("local").setAppName("yello"); 
JavaSparkContext sc=new JavaSparkContext(conf); 

JobConf jobConf=new JobConf(); 
jobConf.set("mapreduce.output.basename", "customName"); 
jobConf.set("mapred.output.dir", "outputPath"); 

JavaRDD<String> input = sc.textFile("inputDir"); 
input.saveAsHadoopDataset(jobConf); 

2) Một cách giải quyết sẽ được viết ra vì nó là vị trí đầu ra của bạn và sử dụng Hadoop FileUtil.copyMerge chức năng để tạo thành tập tin sáp nhập.

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