本文為您介紹MapReduce的分區表輸入樣本。
樣本一:
public static void main(String[] args) throws Exception { JobConf job = new JobConf(); ... LinkedHashMap<String, String> input = new LinkedHashMap<String, String>(); input.put("pt", "123456"); InputUtils.addTable(TableInfo.builder().tableName("input_table").partSpec(input).build(), job); LinkedHashMap<String, String> output = new LinkedHashMap<String, String>(); output.put("ds", "654321"); OutputUtils.addTable(TableInfo.builder().tableName("output_table").partSpec(output).build(), job); JobClient.runJob(job); }
樣本二:
package com.aliyun.odps.mapred.open.example; ... public static void main(String[] args) throws Exception { if (args.length != 2) { System.err.println("Usage: WordCount <in_table> <out_table>"); System.exit(2); } JobConf job = new JobConf(); job.setMapperClass(TokenizerMapper.class); job.setCombinerClass(SumCombiner.class); job.setReducerClass(SumReducer.class); job.setMapOutputKeySchema(SchemaUtils.fromString("word:string")); job.setMapOutputValueSchema(SchemaUtils.fromString("count:bigint")); // 阿里雲帳號AccessKey擁有所有API的存取權限,風險很高。強烈建議您建立並使用RAM使用者進行API訪問或日常營運,請登入RAM控制台建立RAM使用者 // 此處以把AccessKey 和 AccessKeySecret 儲存在環境變數為例說明。您也可以根據業務需要,儲存到設定檔裡 // 強烈建議不要把 AccessKey 和 AccessKeySecret 儲存到代碼裡,會存在密鑰泄漏風險 Account account = new AliyunAccount(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")); Odps odps = new Odps(account); odps.setEndpoint("odps_endpoint_url"); odps.setDefaultProject("my_project"); Table table = odps.tables().get(tblname); TableInfoBuilder builder = TableInfo.builder().tableName(tblname); for (Partition p : table.getPartitions()) { if (applicable(p)) { LinkedHashMap<String, String> partSpec = new LinkedHashMap<String, String>(); for (String key : p.getPartitionSpec().keys()) { partSpec.put(key, p.getPartitionSpec().get(key)); } InputUtils.addTable(builder.partSpec(partSpec).build(), job); } } OutputUtils.addTable(TableInfo.builder().tableName(args[1]).build(), job); JobClient.runJob(job); }
說明
上述樣本是使用MaxCompute SDK和MapReduce SDK組合實現MapReduce任務讀取定界分割的樣本。
此段代碼不能夠編譯執行,僅給出了main函數的樣本。
樣本中applicable函數是使用者邏輯,用於決定該分區是否可以作為MapReduce作業的輸入。