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.
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
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. –
Cảm ơn, mọi nhận xét về cách thêm vào tệp – duck