Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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 如何将hadoop序列文件值更改为jackson解析器?_Java_Json_Hadoop_Jackson_Sequencefile - Fatal编程技术网

Java 如何将hadoop序列文件值更改为jackson解析器?

Java 如何将hadoop序列文件值更改为jackson解析器?,java,json,hadoop,jackson,sequencefile,Java,Json,Hadoop,Jackson,Sequencefile,我有一个问题,我真的不知道该怎么办。我有一个包含网页链接的Hadoop序列文件。Hadoop序列文件的每个条目,键将是一个网页的URL,值将是其属性和链接。该值实际上是一种Json格式。我想读取所有序列文件,并将值传递给jackson解析器以获取链接,但它总是失败。这是我的密码: Configuration conf = new Configuration(); Path seqFilePath = new Path("metadata-00000"); Sequenc

我有一个问题,我真的不知道该怎么办。我有一个包含网页链接的Hadoop序列文件。Hadoop序列文件的每个条目,键将是一个网页的URL,值将是其属性和链接。该值实际上是一种Json格式。我想读取所有序列文件,并将值传递给jackson解析器以获取链接,但它总是失败。这是我的密码:

    Configuration conf = new Configuration();
    Path seqFilePath = new Path("metadata-00000");

    SequenceFile.Reader reader = new SequenceFile.Reader(conf, 
            Reader.file(seqFilePath));
    Writable key = (Writable)ReflectionUtils.newInstance(reader.getKeyClass(), conf); 
    Writable value = (Writable)ReflectionUtils.newInstance(reader.getValueClass(), conf);

    int count = 0;
    while(reader.next(key, value)) {

        System.out.println(value.toString());
        JsonParser jsonParser = new JsonFactory().createJsonParser(value.toString());
        while(jsonParser.nextToken() != JsonToken.END_OBJECT) {
            String name = jsonParser.getCurrentName();
            if(name.equals("server_ip")) {
                System.out.println(jsonParser.getValueAsString());
            }

            if(name.equals("links")) {
                while(jsonParser.nextToken() != JsonToken.END_ARRAY) {
                    String attribute = jsonParser.getCurrentName();

                    if(attribute.equals("href")) {
                        System.out.println(jsonParser.getValueAsString());
                    }                   
                }
            }
        }

        long position = reader.getPosition();
        System.out.println(position);
        count++;

        if(count == 5) {
            break;
        }
    }
文件“metadata-00000”是原始Hadoop序列文件。如您所见,该值实际上是json格式的,我想在Jackson解析器中对其进行分析。但是,该行始终失败:

JsonParser jsonParser = new JsonFactory().createJsonParser(value.toString());
例外情况是:

Exception in thread "main" java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/JsonFactory
    at WebParser.ParserTest.main(ParserTest.java:35)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:212)
Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.core.JsonFactory
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 6 more

那我该怎么处理呢?如何将可写值传输到json解析器?谢谢

您的应用程序无法将class:
com/fasterxml/jackson/core/JsonFactory

验证类路径中是否有jackson core jar

或者尝试将其添加到
pom.xml
文件中(如果您使用maven作为构建工具):


com.fasterxml.jackson.core
杰克逊核心
2.4.2

Hi,我确实包含jackson-core.jar。这个应用程序是我制作一个jar文件并在Hadoop上运行的。这是否意味着我在制作jar文件时没有包含jackson-core.jar?我该怎么处理呢?谢谢是的,你没有包括在内。您正在使用什么构建工具?(如何创建这个jar?)根据构建工具的不同,有不同的方法来包含它。在我对maven的回答中,我已经给了你们解决方案。嗨,我下载了jackson jar并包含在项目中。我没有用maven。因此,就这一点而言,我应该如何包括外部jar来实现它呢?谢谢您好,我已经知道如何包含外部jar,但仍然有一个问题。Json解析器似乎什么都没有。我仍然不知道是否可以将writable.toString()传递到json解析器中。我该怎么处理呢?
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.4.2</version>
</dependency>