मेरा इनपुट डेटा hdfs में है। मैं बस शब्द गणना करने की कोशिश कर रहा हूं लेकिन थोड़ा अंतर है। डेटा जेसन प्रारूप में है। तो डेटा की प्रत्येक पंक्ति है:पार्सिंग जेसन इनपुट हडूप जावा
{"author":"foo", "text": "hello"}
{"author":"foo123", "text": "hello world"}
{"author":"foo234", "text": "hello this world"}
मैं केवल "पाठ" भाग में शब्दों का wordcount करना चाहते हैं।
मैं यह कैसे कर सकता हूं?
मैं अब तक निम्नलिखित संस्करण की कोशिश की:
public static class TokenCounterMapper
extends Mapper<Object, Text, Text, IntWritable> {
private static final Log log = LogFactory.getLog(TokenCounterMapper.class);
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
public void map(Object key, Text value, Context context)
throws IOException, InterruptedException {
try {
JSONObject jsn = new JSONObject(value.toString());
//StringTokenizer itr = new StringTokenizer(value.toString());
String text = (String) jsn.get("text");
log.info("Logging data");
log.info(text);
StringTokenizer itr = new StringTokenizer(text);
while (itr.hasMoreTokens()) {
word.set(itr.nextToken());
context.write(word, one);
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
लेकिन मैं इस त्रुटि हो रही है:
Error: java.lang.ClassNotFoundException: org.json.JSONException
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:820)
at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:865)
at org.apache.hadoop.mapreduce.JobContext.getMapperClass(JobContext.java:199)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:719)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:370)
at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1093)
at org.apache.hadoop.mapred.Child.main(Child.java:249)
उन्होंने अब कोड पोस्ट किया है और कोई डुप्लिकेट नहीं है, इसलिए पांच वर्षीय की तरह सबकुछ कम न करें। ;) –
पिग ऐसा करने के लिए बेहतर विकल्प होगा, आईएमएचओ। और मुझे नहीं पता कि क्यों कुछ लोग डाउनवॉटिंग में बहुत आनंद लेते हैं। और यदि आप वास्तव में ऐसा करना चाहते हैं, तो कृपया कुछ समझदार कारण प्रदान करने के लिए पर्याप्त दयालु रहें। यही वजह है कि लोग क्वारा जैसे अन्य स्थानों पर जा रहे हैं। संभवतः – Tariq