Я делаю приложение для обработки некоторых данных, хранящихся в mongoDB
, с использованием Hadoop
. Я пишу программу в java
.получить значение массива внутри поддокумента mongodb
Дело в том, что у меня есть поддокумент, содержащий массив, и я хочу принять значение одного атрибута массива. Я приведу пример, чтобы увидеть его более ясно.
"entities" : {
"hashtags" : [
{
"**text**" : "whatever",
"indices" : [
59,
69
]
},
{
"**text**" : "whatever",
"indices" : [
82,
95
]
}
],
"urls" : [ ],
"user_mentions" : [ ]
},
Значение текста - это тот, который я хочу обработать.
Так что я разработал программу на Java, и она сообщает мне следующее сообщение об ошибке в классе картографа:
java.lang.ClassCastException: com.mongodb.BasicDBObject cannot be cast to java.lang.String
at HashTagsMapper.map(HashTagsMapper.java:27)
at HashTagsMapper.map(HashTagsMapper.java:18)
at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:764)
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:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121)
at org.apache.hadoop.mapred.Child.main(Child.java:249)
Это класс картографа ->
public class HashTagsMapper extends Mapper<Object, BSONObject, Text, IntWritable>
{
public void map(Object key, BSONObject value, Context context) throws IOException, InterruptedException
{
ArrayList <String> name = new ArrayList<String>();
BSONObject entities = (BSONObject) value.get("entities");
BasicDBList hashtags = (BasicDBList) entities.get("hashtags");
for(int index = 0; index < hashtags.size(); index++){
name.add((String) hashtags.get(index));
}
try{
FileWriter fw = new FileWriter("/home/jonrodriguez/Hashtags.txt");
PrintWriter escribirListaRedundantes = new PrintWriter(fw);
escribirListaRedundantes.println(name);
fw.close();
}
catch(java.io.IOException ioex){}
for(int i = 0; i < name.size(); i++){
context.write(new Text(name.get(i)), new IntWritable(1));
}
}
Может кто-нибудь мне помочь ? Благодаря!
Проблема заключается именно в том, что говорит исключение * - объект, возвращенный из 'hashtags.get (index)', не является 'String', это [' BasicDBObject'] (http://api.mongodb.org) /java/2.0/com/mongodb/BasicDBObject.html). Это соответствует тому, что вы показываете в своем документе - 'hashtags' - это массив объектов, который, в свою очередь, содержит ключи' text' и 'indices'. –
Голосование закрывается, потому что это простое недоразумение со стороны искателя и вряд ли будет полезно будущим читателям. –