gpt4 book ai didi

json - Hadoop从HDFS读取JSON

转载 作者:行者123 更新时间:2023-12-02 20:23:55 25 4
gpt4 key购买 nike

我正在尝试将JSON文件读取到我的hadoop mapreduce算法中。
我怎样才能做到这一点?我已经将文件“testinput.json”放入HDFS内存中的/ input中。

当调用mapreduce时,我执行hadoop jar popularityMR2.jar populariy input output,输入内容指定dhfs内存中的输入目录。

public static class PopularityMapper extends Mapper<Object, Text, Text, Text>{


protected void map(Object key, Text value,
Context context)
throws IOException, InterruptedException {

JSONParser jsonParser = new JSONParser();
try {
JSONObject jsonobject = (JSONObject) jsonParser.parse(new FileReader("hdfs://input/testinput.json"));
JSONArray jsonArray = (JSONArray) jsonobject.get("votes");

Iterator<JSONObject> iterator = jsonArray.iterator();
while(iterator.hasNext()) {
JSONObject obj = iterator.next();
String song_id_rave_id = (String) obj.get("song_ID") + "," + (String) obj.get("rave_ID")+ ",";
String preference = (String) obj.get("preference");
System.out.println(song_id_rave_id + "||" + preference);
context.write(new Text(song_id_rave_id), new Text(preference));
}
}catch(ParseException e) {
e.printStackTrace();
}
}

}

我的映射器函数现在看起来像这样。我从dhfs内存中读取了文件。但是它总是返回一个错误,找不到文件。

有人知道我如何将这个json读入jsonobject吗?

谢谢

最佳答案

  • FileReader无法从HDFS读取,只能从本地文件系统读取。
  • 文件路径来自Job参数-FileInputFormat.addInputPath(job, new Path(args[0]));

  • 无论如何,您都不会在Mapper类中读取文件。

    MapReduce默认读取行分隔文件,因此您的JSON对象必须是每行一个,例如
    {"votes":[]}
    {"votes":[]}

    从映射器中,您将像这样将Text对象解析为JSONObject。
     protected void map(LongWritable key, Text value, Context context)
    throws IOException, InterruptedException {

    JSONParser jsonParser = new JSONParser();
    try {
    JSONObject jsonobject = (JSONObject) jsonParser.parse(value.toString());
    JSONArray jsonArray = (JSONArray) jsonobject.get("votes");

    如果文件中只有一个JSON对象,则可能不应该使用MapReduce。

    否则,您将必须实现 WholeFileInputFormat并将其设置在Job中
    job.setInputFormatClass(WholeFileInputFormat.class);

    关于json - Hadoop从HDFS读取JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58556492/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com