1. 程式人生 > >hadoop中讀取protobuf資料

hadoop中讀取protobuf資料

在mapreduce中讀取protobuf資料時,會遇到一個坑

BytesWritable。當你把byte[]資料儲存到BytesWritable後,通過BytesWritable.getBytes()再讀到的資料並不一定是原資料,可能變長了很多,這是因為BytesWritable採用了自動記憶體增長演算法,你儲存的資料長度為size時,它可能將資料儲存到了長度為capacity(capacity>size)的buffer中,這時候,你通過BytesWritable.getBytes()得到的資料最後一些字元是多餘的,如果裡面儲存的是protobuf序列化後的資料,則無法反序列化,這時候可以使用BytesWritable.setCapacity(BytesWritable.getLength())將後面多餘空間剔除掉,然後就可以使用protobuf反序列為原始資料。


關鍵程式碼如下

conf.setInputFormat(SequenceFileAsBinaryInputFormat.class);

public void map(Object key, BytesWritable values, OutputCollector output,
            Reporter reporter) throws IOException {
    values.setCapacity(values.getLength());// very important !!!
    byte[] data = values.getBytes();
    // more code
}


相關推薦

hadoop讀取protobuf資料

在mapreduce中讀取protobuf資料時,會遇到一個坑 BytesWritable。當你把byte[]資料儲存到BytesWritable後,通過BytesWritable.getBytes()再讀到的資料並不一定是原資料,可能變長了很多,這是因為BytesWri

Python對MySQL讀取資料進行json化

對MySQL中讀取的資料進行json化 資料格式: ((cluster1,db1,tb1), (cluster1,db1,tb2), (cluster1,db1,tb3), (cluster1,db2,tb3), (cluster2,db3,tb5), (cluster3,db4

Drupal 讀取Excel資料再轉換格式到另一個Excel

開放原碼了,再有同學碰到類似問題,不會像我這樣到處去找資料和翻網站,碼中有什麼不好或者有什麼缺點的請看到的同學多多指教,好更好的更新程式碼。 放個costsheet.info先: name = CostSheet Convert Puma description = 讀

Apache Calcite:Hadoop新型大資料查詢引擎

http://www.open-open.com/lib/view/open1442458630727.htmlApache Calcite是面向Hadoop新的查詢引擎,它提供了標準的SQL語言、多種查詢優化和連線各種資料來源的能力,除此之外,Calcite還提供了OLAP

使用VBScript從Access讀取表格資料

第一步:連線Access資料庫 <% dim conn,rs set conn = server.createObject("adodb.connection")'宣告一個數據庫例項 '連線資料庫 conn.connectionString = "Provider=M

史無前例之---NodeJs 讀取OracleDB 資料,將data 生成 Excel檔案

/** * Created by json on 2017/6/5. * 推介使用:excel-export * 根據data ,JSON.parse(data)---<data=JSON.stringify(result)> * 設定 Exce

根據檔案讀取資料使用turtle繪製圖形路徑

前言 這篇部落格主要是對從檔案中讀取的資料使用turtle繪製圖形路徑的操作 嗯,獨立完成,秀操作,明天也要加油鴨!!! 資料 資料是.txt檔案,共9行,每一行的第一列表示烏龜前進的畫素數,第二列表示轉動的方向(0表示向左),第三列表示

從資料庫讀取資料,然後用XML輸出

{ 37                    // node "Location" 38                    w.WriteStartElement("Location"); 39                    w.WriteAttributeString("ID", locati

Hadoop新型大資料查詢引擎:Apache Calcite

來自: http://www.infoq.com/cn/articles/new-big-data-hadoop-query-engine-apache-calcite http://www.open-open.com/lib/view/open1442458630727.html &n

Cocos2d-x 3.x讀取csv資料檔案

遊戲開發中,資料檔案通常是儲存在xml,json,csv等格式的檔案中,這裡實現了CSV檔案的解析。 1.為什麼是CSV?    資料檔案為什麼儲存在CSV檔案中呢?    a,同樣的資料放到CSV中要比放在xml和json中要小。    b,CSV的解析也比較簡單。  

C# 讀取資料庫資料的問題

程式首先是要判斷一天資訊是否存在於資料庫中,然後若存在則將資料展示在頁面的ListView中。 用來兩種方法: 1.用Adapter private static string strConnect = "Provider = Microsoft.Jet.OLEDB.4

怎麼在delphi讀取Excel資料(各種詳細操作)

( 一 ) 使用動態建立的方法首先建立 Excel 物件,使用ComObj :VarExcelApp : Variant ;ExcelApp := CreateOleObject ( '' Excel.Application'' ) ;1 ) 顯示當前視窗:Exce

在 Map[Reduce] 的 setup 讀取 HDFS 資料夾資訊

        有時候,我們想在 Map 或者 Reduce 執行前讀取一些資料資訊(量相對比較小),又不想通過另一個 Map 來讀取,就可以在 該Map 的 setup 中來完成該操作。 相關定義1.在HDFS上某一資料夾下存放使用者資訊列表: /user/data/

TensorFlow讀取影象資料的三種方式

  本文面對三種常常遇到的情況,總結三種讀取資料的方式,分別用於處理單張圖片、大量圖片,和TFRecorder讀取方式。並且還補充了功能相近的tf函式。 1、處理單張圖片   我們訓練完模型之後,常常要用圖片測試,有的時候,我們並不需要對很多影象做測試,可能就是幾張甚至一張。這種情況下沒有必要用佇列機制。

C++opencv讀取資料的多幅圖片並按順序重新命名後儲存到另一資料

#include <iostream> #include <fstream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include &

c++txt檔案的讀取以及在MFC讀取txt座標資料並完成圖形繪製

主要介紹如何讀取txt檔案中的座標資料,並在MFC視窗中繪製出來,工程建立方法和繪圖方法與上一篇博文基本一致,這裡就不再詳贅述,可參考上一篇博文vs2010、MFC視窗中繪製點、線、面。 C++中讀取檔案的方法有兩種,一種是來自於C語言的“檔案指標”方法,另一種是C++中的“檔案流”思想。

python 從檔案讀取資料,同時去除掉空格和換行

從檔案中讀取資料,同時去除掉空格和換行,程式碼如下 import numpy as np def sort(path): w = open(path,'r') l = w.readlines() col=[] for k in l: k = k.strip('\n')

Hadoopsplit數量和reader讀取原則

畫一個簡單的hadoop執行圖 這裡我以單詞計數為例,在WCapp(在上篇博文《split數量計演算法則》有原始碼)中設定最小切片數值和最大切片數值,把最大切片數值設定成13,即13個位元組   要計數的資料     這裡有個問題我們把切片值的設的很小,第

python讀取sqlserver資料,並儲存到csv

# -*- coding: utf-8 -*- """ @use:查詢17.11-18.1,18.6-18.8的PM2.5資料,匯出到csv """ import pymssql import xlwt import datetime from xml.dom.minidom import

在佇列讀取資料

注意儲存的形式:list、tuple image = tf.cast(image,tf.string) input_queue = tf.train.slice_input_producer([image,label]) label = input_queue[1] image_con