gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 21:45:11 24 4
gpt4 key购买 nike

我有一个我真的不知道该怎么办的问题。我有一个包含网页链接的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)是:
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

那么我应该如何处理呢?如何将Writable值传输到json解析器?谢谢!

最佳答案

您的应用无法提交类:com/fasterxml/jackson/core/JsonFactory
验证您的类(class)路径中是否有 jackson 核心 jar 。

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

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.4.2</version>
</dependency>

关于java - 如何将hadoop序列文件的值更改为jackson解析器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25937513/

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