1. 程式人生 > >MapReduce中使用BytesWritable型別時要注意

MapReduce中使用BytesWritable型別時要注意

 轉載地址:http://blog.csdn.net/xcytec/article/details/20909151

在MR程式中出現錯誤,資料讀取的內容和原檔案不一致,經過定位是因為使用BytesWritable型別導致的。

“BytesWritable,使用這個型別非常容易犯錯誤。當你把一堆byte[]資料儲存到BytesWritable後,通過BytesWritable.getBytes()再讀到的資料並不一定是原資料,可能變長了很多,這是因為BytesWritable採用了自動記憶體增長演算法,你儲存的資料長度為size時,它可能將資料儲存到了長度為capacity(capacity>size)的buffer中,這時候,你通過BytesWritable.getBytes()得到的資料最後一些字元是多餘的,如果裡面儲存的是protocolbuffer序列化後的字串,則無法反序列化,這時候可以使用BytesWritable.setCapacity (value.getSize())將後面多餘空間剔除掉。”

個人建議是不使用這個型別,因為有時候因為這個錯誤導致的錯誤非常隱蔽。因為我已經料想到這裡有坑,在讀出內容時進行特殊處理

Stringcontent = new String(value.getBytes(), 0, value.getLength());

即使這樣,依然掉到坑裡。

不過上面所述的setCapacity我倒沒有試過。

相關推薦

MapReduce使用BytesWritable型別注意

 轉載地址:http://blog.csdn.net/xcytec/article/details/20909151 在MR程式中出現錯誤,資料讀取的內容和原檔案不一致,經過定位是因為使用BytesWritable型別導致的。 “BytesWritable,使用這個型別非常容易犯錯誤。當你把一堆byt

MySQL 處理 Null 注意兩個陷阱

MySQL資料庫是一個基於結構化資料的開源資料庫。SQL語句是MySQL資料庫中核心語言。不過在MySQL資料庫中執行SQL語句,需要小心兩個陷阱。 陷阱一:空值不一定為空 空值是一個比較特殊的欄位。在MySQL資料庫中,在不同的情形下,空值往往代表不同的含義。這是M

在TstringList加入物件注意的問題

TstringList有個AddObject方法,在加入專案時可以加入一個關聯物件,但在加入物件時要注意的是,加入的只是這個物件的地址,並不是值,所以如果使用下面的語句:for i:=1 to 5 dobegin  list.addObject(IntToStr(i),TOb

MyBatis只傳一個String引數注意的事項

引數名為_parameter,不需要指定成傳入的引數名,參考程式碼如下: <select id="getLoop" resultMap="AAA" parameterType="String"> SELECT *, ROWNUM RN from tablename

Entity Framework Core 使用多個DBContext注意

使用多個DBContext如果有主鍵和外來鍵之間的連線,如果每個DBContext分別生成遷移配置檔案,再啟動程式,會造成未知異常。 因為2個表如果有主鍵和外來鍵的連線,但是2個表分別在2個DBContext中,那麼EF core會難以進行資料連線之間的判斷,可能會因為找不

springcloud使用flyway作資料遷移注意的問題

pom中引用flyway的core包 <dependency> <g

Location許可權,因系統版本不同,6.0許可權對話方塊沒有,7.0,8.0正常,開發注意

1、一個獲取Location許可權引發的刺激,就這三個Location許可權 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission an

PHP 在foreach使用&注意事項

$arr = [111, 222, 333];foreach ( $arr as &$value ) { var_dump($value);}foreach ( $arr as $value ) { var_dump($value);} 執行結果: 出現這種情況是因為在第一個for

簡豪全鋁家居在選擇品牌注意哪些問題

在完成了家庭裝修以後,需要選擇合適的傢俱產品,才可以在居住時,覺得舒適程度非常的高。各種型別的家居產品越來越多,在挑選的時候是需要注意很多方面的問題。越來越多的使用者對簡豪全鋁家居會非常的喜歡,環保級別很高,有很多的款式可以提供給使用者來進行選擇。市場當中也有很

vue入門元件命名需要注意的地方

下面這張圖是從vue官方上擷取的  其實不只是駝峰命名的prop在自定義標籤中需要用等價的短橫線分隔命名,元件自定義的標籤名稱也一樣  還是官網的例子只不過我把元件的名稱改為駝峰式為  blogPost Vue.component('blogP

WebAPI與Signalr開發的跨域注意的細節

app.Map("/signalr", map => { map.UseCors(CorsOptions.AllowAll); var hubConfiguration = ne

JAVA使用並行流(ParallelStream)注意的一些問題

List<String> words = new ArrayList<String>(); words.add("your"); words.add("name"); public static Stream<Character> character

關於修改Oracle伺服器IP及埠注意的問題

關於修改 Oracle 伺服器 IP 及埠時要注意的問題 (原創: flexitime ,轉載請註明出處,謝謝) 一個安裝好的 Oracle 伺服器,如果修改伺服器的 IP 地址或埠號,可能會使得這個伺服器無法再連線上。所以安裝時要注意一下以下問題。 1. 安裝 O

並行化注意的執行緒安全與任務安全

在序列程式設計時,操作都是按順序執行的,比如數字從1到100000遞增,就必然的是1、2、3、4……100000。程式碼如下 for (int i = 1; i <= 100000; i++) { Consol

使用HttpWebRequest post資料注意UrlEncode[http自動轉義]

今天在用HttpWebRequest類向一個遠端頁面post資料時,遇到了一個怪問題,總是出現500的內部伺服器錯誤,通過檢視遠端伺服器的log,發現報的是“無效的檢視狀態”錯誤: 通過對比自己post的__VIEWSTATE和伺服器接收到的__VIEWSTATE的值(通

谷歌瀏覽器使用css3Calc計算器需要注意的事請

  在最近的一個專案中,我使用calc函式計算寬度犯了一個錯,一個很有趣的錯誤。在css裡我寫了下面的程式碼:         width: calc(100%-351px);    但它沒有按我與預期設計生效,而且,在瀏覽器的debug工具裡顯示,這句程式碼是有誤的。很奇怪,瀏覽器是最新版的谷歌瀏覽器,

Java可變引數方法過載注意的幾個問題

轉載自:http://www.blogjava.net/rongxh7/archive/2010/04/18/318698.html JDK1.5引進了方法的可變引數,受到許多開發人員的青睞。有了這種機制,我們可以寫出類似於JavaScript的arguments那樣的

16屆畢業的程式設計師在暑假實習注意些什麼

  兩年前的現在小y自己在實習,一年前就已經寫過文章談過“實習”。經過兩年的時間,其中整整一年的工作經驗,小y再跟小夥伴們聊聊這個話題。 (圖為奶茶妹妹在微軟實習時主持“微軟小冰”宣傳活動)     學習的心態   實習其實很好混,因為公司一般都不會把你當作正式員工看待,紀律和工作效率考核都非常放鬆。

lnmp1.4配置yii2注意,修改.user.ini外還要修改fastcgi.conf

LNMP 1.4上如果不想用防跨目錄或者修改.user.ini的防跨目錄的目錄還需要將 /usr/local/nginx/conf/fastcgi.conf 裡面的fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_ro

微控制器和串列埠裝置通訊設計注意的幾個問題

現在有很多外設喜歡通過UART介面進行通訊控制,比如串列埠WIFI模組,串列埠藍芽模組,串列埠HMI等等。因為基本上每款微控制器都有UART這個硬體裝置,這使得通過UART來控制的外設可以在眾多微控制