Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么不是';我的减速机不在文件中读取吗?_Java_Hadoop_Mapreduce_Hdfs - Fatal编程技术网

Java 为什么不是';我的减速机不在文件中读取吗?

Java 为什么不是';我的减速机不在文件中读取吗?,java,hadoop,mapreduce,hdfs,Java,Hadoop,Mapreduce,Hdfs,我有一个方法,可以从.txt文件创建一个哈希表,并使用该哈希表为传递给Reducer的值中的单词赋值。以下是我尝试这样做的方式: @Override public void setup(Context context) throws IOException { Path pt = new Path("hdfs:/user/jk/sentiwords.txt"); FileSystem fs = FileSystem.get(new Configuration()); Bu

我有一个方法,可以从.txt文件创建一个哈希表,并使用该哈希表为传递给Reducer的值中的单词赋值。以下是我尝试这样做的方式:

@Override
public void setup(Context context) throws IOException {
    Path pt = new Path("hdfs:/user/jk/sentiwords.txt");
    FileSystem fs = FileSystem.get(new Configuration());
    BufferedReader br = new BufferedReader(new InputStreamReader(fs.open(pt)));
    String line = br.readLine();
    while (line!=null) {
        String[] split =  line.split("\t");
        String word = split[0].substring(0, split[0].length() - 2);
        double score = Double.parseDouble(split[1]);
        int hashCode = word.hashCode();
        sentiTable.put(hashCode, score);
        line = br.readLine();
        System.out.println("Success");
    }
}
然后在该方法中使用它,该方法对键/值对中的每个值调用:

public double analyzeString(String str) {
    double stringScore = 0.0;
    String[] strArr = str.replaceAll("[^a-zA-Z ]", "").toLowerCase().split(" ");
    for (String segment: strArr) {
        int hashedSeg = segment.hashCode();

        if (sentiTable.containsKey(hashedSeg)) {
            double value = (double) sentiTable.get(hashedSeg);
            stringScore += value;
        }
    }
    return stringScore;
}
理想情况下,这应该返回一个介于-1和1之间的数字。实际上,它总是返回0

编辑:


我应该注意,sentiTable是在类级别创建的。

结果为0可能意味着没有从该文件读取任何内容。我发现有两件事可能出了问题:

  • 错误路径:我认为hdfs路径应该以
    hdfs://...
    ,而不是
    hdfs:/…

  • 路径和文件系统的导入错误。请确保导入Hadoop提供的

  • 您始终可以在setup方法中打印消息,以查看是否已找到该文件


    额外:您可能需要重新考虑包含检查,因为在大数据中使用字符串的哈希代码时会发生许多冲突。

    我发现了-我正在读取的文件有格式错误!它应该是以制表符分隔的,而且大部分都是这样,但是在某个点上出现了一些新行。我感谢你的帮助