Lỗi phân vùng tùy chỉnh (Custom Partitioner Error)


問題描述

Lỗi phân vùng tùy chỉnh (Custom Partitioner Error)

I am writing my own custom Partitioner(Old Api) below is the code where I am extending Partitioner class:

public static class WordPairPartitioner extends Partitioner<WordPair,IntWritable> {

   @Override
   public int getPartition(WordPair wordPair, IntWritable intWritable, int numPartitions) {
        return wordPair.getWord().hashCode() % numPartitions;
    }
}

Setting the JobConf:  

conf.setPartitionerClass(WordPairPartitioner.class);

WordPair Class contains:     private Text word;     private Text neighbor;

Questions: 1. I am getting error:"actual argument class (WordPairPartitioner) cannot convert to Class (?extends Partitioner). 2. Is this a right way to write the custom partitioner or do I need to override some other functionality as well?


參考解法

方法 1:

I believe you are mixing up old API(classes from org.apache.hadoop.mapred.*) and new API(classes from org.apache.hadoop.mapreduce.*)

Using old API, you may do as follows:

import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.mapred.Partitioner;
public static class WordPairPartitioner implements Partitioner<WordPair,IntWritable> {

   @Override
   public int getPartition(WordPair wordPair, IntWritable intWritable, int numPartitions) {
        return wordPair.getWord().hashCode() % numPartitions;
    }


   @Override
   public void configure(JobConf arg0) {

   }
}

方法 2:

In addition to Amar's answer, you should handle the eventuality of hashCode returning a negative number by bit masking:

@Override
public int getPartition(WordPair wordPair, IntWritable intWritable, int numPartitions) {
    return (wordPair.getWord().hashCode() % numPartitions) & 0x7FFFFFFF;
}

(by JackSparrowAmarChris White)

參考文件

  1. Custom Partitioner Error (CC BY‑SA 3.0/4.0)

#hadoop #partitioner






相關問題

hadoop -libjars dan ClassNotFoundException (hadoop -libjars and ClassNotFoundException)

基於感興趣的日期範圍作為參數輸入限制在 Pig Latin 中加載日誌文件 (Restricting loading of log files in Pig Latin based on interested date range as parameter input)

選擇 MapReduce 設計模式 (Choosing a MapReduce Design Pattern)

Lỗi phân vùng tùy chỉnh (Custom Partitioner Error)

Connection Refused - 為什麼 zookeeper 嘗試連接到 localhost 而不是服務器 ip (Connection Refused - Why does zookeeper tries to connect to localhost instead of a server ip)

現有表的 Hive 分桶和分區 (Hive bucketing and partition for existing table)

如何在 R 中讀取 HDFS 中的文件而不會丟失列名和行名 (How to read files in HDFS in R without loosing column and row names)

CDH 網絡接口速度抑制 (CDH Network Interface Speed Suppress)

Apache Apex 是依賴 HDFS 還是有自己的文件系統? (Does Apache Apex rely on HDFS or does it have its own file system?)

java.io.IOException:作業失敗!使用 hadoop-0.19.1 在我的 osx 上運行示例應用程序時 (java.io.IOException: Job failed! when running a sample app on my osx with hadoop-0.19.1)

如何使用 PIG 腳本驗證列表 (How to validate a list using PIG script)

使用 spark-submit 為 Spark Job 設置 HBase 屬性 (set HBase properties for Spark Job using spark-submit)







留言討論