1. 程式人生 > >spark rdd根據key儲存進不同的資料夾

spark rdd根據key儲存進不同的資料夾

public class TextOutputFormat<K, V> extends FileOutputFormat<K, V> {      //靜態內部類,LineRecordWriter,實現了RecordWriter。這個就是我們想要的   protected static class LineRecordWriter<K, V>     implements RecordWriter<K, V> {     private static final String utf8 = "UTF-8";     private static final byte[] newline;  //newline  是用\n標記換行     static {       try {         newline = "\n".getBytes(utf8);       } catch (UnsupportedEncodingException uee) {         throw new IllegalArgumentException("can't find " + utf8 + " encoding");       }     }     protected DataOutputStream out;     private final byte[] keyValueSeparator;     public LineRecordWriter(DataOutputStream out, String keyValueSeparator) {       this.out = out;       try {         this.keyValueSeparator = keyValueSeparator.getBytes(utf8);       } catch (UnsupportedEncodingException uee) {         throw new IllegalArgumentException("can't find " + utf8 + " encoding");       }     }     public LineRecordWriter(DataOutputStream out) {       this(out, "\t");     }     /**      * Write the object to the byte stream, handling Text as a special      * case.      * @param o the object to print      * @throws IOException if the write throws, we pass it on      */     private void writeObject(Object o) throws IOException {       if (o instanceof Text) {         Text to = (Text) o;         out.write(to.getBytes(), 0, to.getLength());       } else {         out.write(o.toString().getBytes(utf8));       }     }      //核心方法,通過這個方法把key和value寫入到hdfs檔案中     public synchronized void write(K key, V value)       throws IOException {       boolean nullKey = key == null || key instanceof NullWritable;       boolean nullValue = value == null || value instanceof NullWritable;       if (nullKey && nullValue) {//如果key和value都為null或者NullWritable就退出         return;       }       if (!nullKey) {         writeObject(key);//寫入key       }       if (!(nullKey || nullValue)) {         out.write(keyValueSeparator);//寫入分隔符,預設是\t       }       if (!nullValue) {         writeObject(value); //寫入value       }       out.write(newline); //寫入換行符     }     public synchronized void close(Reporter reporter) throws IOException {       out.close();     }   }   public RecordWriter<K, V> getRecordWriter(FileSystem ignored,                                                   JobConf job,                                                   String name,                                                   Progressable progress)     throws IOException {     boolean isCompressed = getCompressOutput(job);     String keyValueSeparator = job.get("mapreduce.output.textoutputformat.separator",                                        "\t");     if (!isCompressed) {       Path file = FileOutputFormat.getTaskOutputPath(job, name);       FileSystem fs = file.getFileSystem(job);       FSDataOutputStream fileOut = fs.create(file, progress);       return new LineRecordWriter<K, V>(fileOut, keyValueSeparator);     } else {       Class<? extends CompressionCodec> codecClass =         getOutputCompressorClass(job, GzipCodec.class);       // create the named codec       CompressionCodec codec = ReflectionUtils.newInstance(codecClass, job);       // build the filename including the extension       Path file =         FileOutputFormat.getTaskOutputPath(job,                                            name + codec.getDefaultExtension());       FileSystem fs = file.getFileSystem(job);       FSDataOutputStream fileOut = fs.create(file, progress);       return new LineRecordWriter<K, V>(new DataOutputStream                                         (codec.createOutputStream(fileOut)),                                         keyValueSeparator);     }   } }

相關推薦

spark rdd根據key儲存不同資料

public class TextOutputFormat<K, V> extends FileOutputFormat<K, V> {      //靜態內部類,LineRecordWriter,實現了RecordWriter。這個就是我們想要的   protected stati

Spark RDDKey儲存不同檔案

基本需求 將Keyed RDD[(Key,Value)]按Key儲存到不同檔案。 測試資料 資料格式:id,studentId,language,math,english,classId,depart

Spark RDD/DataFrame map儲存資料的兩種方式

使用Spark RDD或DataFrame,有時需要在foreachPartition或foreachWith裡面儲存資料到本地或HDFS。 直接儲存資料 當然如果不需要在map裡面儲存資料,那麼針對RDD可以有如下方式 val rdd = // targ

Spark實現根據key值來分目錄儲存檔案 多檔案輸出(MultipleOutputFormat)

假設我們有這樣的(key,value)資料: sc.parallelize(List((20180701, "aaa"), (20180702, "bbb"), (20180701, "ccc")))我們想把它們存到路徑“output/”下面,而且key值相同的儲存在同一檔案

Riak, Spark, Golang, Erlang, 雲端儲存, 雲端計算, 資料探勘

CPU的位和字長  位:在數位電路和電腦技術中採用二進位制,程式碼只有“0”和“1”,其中無論是 “0”或是“1”在CPU中都是 一“位”。  字長:電腦技術中對CPU在單位時間內(同一時間)能一次處理的二進位制數的位數叫字長。所以能處理字長為8位資料的CPU通常就叫8位的CPU。同理32位的CPU就能在單位

spark rdd根據某一列去重

比如一個rdd有兩列 name age name有重複的,現在要根據name來去重 m = rdd.map(lambda r:(r[0],r)) r = m.reduceByKey(lambda x,y:x)首先先生成一個以該列為標準去重的key,該行為value,然後呼叫

shell指令碼--儲存清理空資料

注:此指令碼用於儲存處理空資料夾的內容,一般在ext3格式(或ext3版本之前的磁碟格式形式)的磁碟形式會出現資料夾滿了之後無法在建立資料夾的情況!! 1.登入一臺掛載儲存的伺服器,進入file資料夾 cd /var/ftp/file 2.編輯指令碼 vi removenu

Python:批量按xml標註將目標crop剪下圖片並按類儲存到相應資料

from __future__ import division import os from PIL import Image import xml.dom.minidom import numpy as np ImgPath = '/'  AnnoPath = '' ProcessedP

同名model但是不同資料或者專案下require_cache問題

今天該程式碼,發現一個bug找了半天嗯是沒有找出來,但是發現一個有趣的問題,呼叫model和當前model是相同名稱,我猜是這個問題,最後驗證的確是這個問題, 1:瀏覽器只會報500錯誤 2:開啟debug列印和日誌都顯示空白 目前解決辦法有三個, 第一個很簡單,改掉其中一個mo

logback將日誌寫入不同資料

轉載:logback不同業務的日誌列印到不同檔案 一、logback.xml檔案配置如下: <?xml version="1.0" encoding="UTF-8" ?> <configuration> <contextName>nana</cont

不同域名指向同一伺服器下的不同資料

NameVirtualHost *:80 <VirtualHost *:80> DocumentRoot /var/www/html/aa/ ServerName www.a

不同資料圖示設計

建立新文件 啟動Illustrator進行File> New(或使用Control-N鍵盤快捷鍵)操作來建立一個新文件,進行如下操作: 畫板數量:12 間距:32畫素 專欄:4 寬度:64畫素 身高:64畫素 單位:畫素 調整“高階”選項卡: 色彩

Android實現截圖,將截圖檔案儲存到本地資料

Android實現對當前介面截圖,並將截圖檔案存放至本地資料夾 首先需要動態申請兩項許可權(Android6.0後危險許可權之類的都需要動態申請),在AndroidManifest.xml中靜態新增 <uses-permission android:name="android.perm

使用OpenCV2批量裁剪圖片,並將裁剪後的圖片儲存至指定資料

       在做影象復原的相關工作中,由於資料集的缺失,我們通常需要將圖片裁剪成比較小的crop。比如在做深度學習影象去噪的相關研究的時候,由於影象去噪不太關注整體的影象內容,所以可以先將大的圖片裁剪成小的crop,以次來增加資料量。       具體程式碼如下:

使用python將圖片按標籤分入不同資料

    給定影象集如下,所有類別的圖片均在一個資料夾內:     給定與圖片名相匹配的表格,宣告每張圖片對應的類別(共有20個類別):     那麼,如何根據表格中所給的類別將圖片分入對應的資料夾內呢?以我的情況為例,我想將圖片分為20類(CATEGORY_ID有

python引入不同資料下的自定義模組

初學Python,這個問題搞了我好久,現在來分享下我的解決思路,希望可以幫到大家。 先說下python引入模組的順序:首先現在當前資料夾下查詢,如果沒有找到則查詢Python系統變數中的模組。所以說,當我們引入同一個資料夾下的自定義模組時,可以很順利的引入而不

php下載檔案並儲存到指定資料

php下載圖片並儲存到指定資料夾 function GrabImage($url, $dir, $filename=''){ if(empty($url)){ return false; } $ext = strrchr($url, '.'); if($ext

原創:samba實現不同許可權進入不同資料

要實現的效果: 共享資料夾:user1, user2, user3, group1, group2 1、使用者user1屬於組group1; 使用者user2屬於組group1和組group2;使用

新手--網路訪問的json資料儲存在本地資料, 離線使用

這裡寫了一個Demo, 因為看之前的同事寫的程式碼, 在MainActivity中太多,因此抽出了一個專門處理下載的util 具體程式碼如下(因為我寫的很多變數需要在其他類中訪問,這裡直接使用 public static 來定義的,減少麻煩, 此外,因為我是用的是webse

python py檔案如何呼叫不同資料下的py檔案

import sys sys.path.append('../A/') import aa a=aa.classA("chai") a.sayBeyBye() aa.sayHello("chai") A、B不同的資料夾,B檔案下的py呼叫A檔案下的py中的函式。