您好,登錄后才能下訂單哦!
? reduce執行完畢之后,每個reduce都會將KV輸出到一個文件中。那么KV輸出到文件中時是以什么格式輸出的呢?這就涉及到兩個抽象類:OutputFormat和RecordWriter。
public abstract class OutputFormat<K, V> {
public OutputFormat() {
}
public abstract RecordWriter<K, V> getRecordWriter(TaskAttemptContext var1) throws IOException, InterruptedException;
public abstract void checkOutputSpecs(JobContext var1) throws IOException, InterruptedException;
public abstract OutputCommitter getOutputCommitter(TaskAttemptContext var1) throws IOException, InterruptedException;
}
其實主要就是創建RecordWriter對象。
public abstract class RecordWriter<K, V> {
public RecordWriter() {
}
//將KV寫入到輸出流
public abstract void write(K var1, V var2) throws IOException, InterruptedException;
//關閉流
public abstract void close(TaskAttemptContext var1) throws IOException, InterruptedException;
}
主要就是write方法,將KV寫入到文件中。
? 繼承 FileOutputFormat,返回的RecordWriter是TextOutputFormat.LineRecordWriter。將每個KV轉換為文本的每一行。可以定義key和value在文本中的分隔符,默認是“\t”。
? 同樣繼承于FileOutputFormat,返回的RecordWriter是一個匿名內部類,直接將所有的KV以追加的方式寫入到文本中,不另外分行(除非原先數據中帶有換行)。
? SequenceFileOutputFormat將它的輸出寫為一個順序文件。如果輸出需要作為后續 MapReduce任務的輸入,這便是一種好的輸出格式,因為它的格式緊湊,很容易被壓縮。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。