我的java代码
public class Recipe {
public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable>{
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
Gson gson = new Gson();
public void map(Object key, Text value, Context context ) throws IOException, InterruptedException {
Roo roo=gson.fromJson(value.toString(), Roo.class);
if (roo.manner_of_death != null) {
word.set(roo.manner_of_death);
} else {
word.set("none");
}
context.write(word, one);
}
}
public static class IntSumReducer
extends Reducer<Text,IntWritable,Text,IntWritable> {
private IntWritable result = new IntWritable();
public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
int sum = 0;
for (IntWritable val : values) {
sum += val.get();
}
result.set(sum);
context.write(key, result);
}
}
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
if (otherArgs.length != 2) {
System.err.println("Usage: recipe <in> <out>");
System.exit(2);
}
@SuppressWarnings("deprecation")
Job job = new Job(conf, "Recipe");
job.setJarByClass(Recipe.class);
job.setMapperClass(TokenizerMapper.class);
job.setCombinerClass(IntSumReducer.class);
job.setReducerClass(IntSumReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
// FileInputFormat.addInputPath(job, new Path("hdfs://127.0.0.1:9000/in"));
// FileOutputFormat.setOutputPath(job, new Path("hdfs://127.0.0.1:9000/out"));
System.exit(job.waitForCompletion(true) ? 0 : 1);
// job.submit();
}
}
class Id
{
public String oid;
}
class Roo
{
public Id _id ;
public String resident_status;
public String month_of_death;
public String sex;
public String marital_status;
public String manner_of_death;
public String autopsy;
public String race;
}
我的JSON
{
"_id" : ObjectId("5bfc49155fa79a44dca1f9b9"),
"resident_status" : "1",
"month_of_death" : "06",
"sex" : "M",
"marital_status" : "M",
"manner_of_death" : "7",
"autopsy" : "N",
"race" : "02"
}
{
"_id" : ObjectId("5bfc49155fa79a44dca1f56c"),
"resident_status" : "1",
"month_of_death" : "03",
"sex" : "F",
"marital_status" : "D",
"manner_of_death" : "7",
"autopsy" : "N",
"race" : "01"
}
除id外,所有字段均为字符串
我的错误
18/11/26 18:02:55信息mapreduce。作业:任务Id:尝试_1543189350698_0010_m_000000_0,状态:失败错误:com.google.格森。JsonSyntaxException:java。伊奥。EOFEException:com第1行第3列的输入结束。谷歌。格森。格森。fromJson(Gson.java:813)
18/11/26 18:02:55信息mapreduce。作业:任务Id:尝试_1543189350698_0010_m_000001_0,状态:失败错误:com.google.格森。JsonSyntaxException:java。lang.IllegalStateException:应为BEGIN_对象,但在第1行为字符串
当你这么做的时候,
class Id
{
public String oid;
}
class Roo
{
public Id _id ;
你告诉Gson它正试图解析这种类型的对象
{
"_id" : {
"oid" : "5bfc49155fa79a44dca1f56c"
},
...
}
这不是你所拥有的,你也没有有效的JSON,因为ObjectId
没有引号。
第二个问题——MapReduce默认读取单行数据,如果您的输入文件只有两行数据就可以了,但JSON仍然应该有效
{ "_id" : ... }
{ "_id" : ... }
我使用Laravel构建了一个简单的API,它运行良好。我的Android应用程序应该使用这个API中的数据,但对于一些JSON响应,我得到了一个错误 应为BEGIN_对象,但在第1行第1列路径处为字符串 在得到这个错误之前,错误如下: 使用JsonReader。setLenient(true)在第1行第1列路径接受格式错误的JSON 然后我来解决它。 我在许多其他帖子中看到,这个问题是一个畸形的
这将创建异常 非常感谢你的帮助。
我试图检索数据并在回收器视图中显示它们。我正在进行改装,提出获取请求...一切都很好,除了:它不会在回收器中显示数据,因为它说:“预期BEGIN_ARRAY但在第1行第2列BEGIN_OBJECT”。我还使用了JSON插件中的kotlin数据类文件,从响应中生成数据类。我不知道该怎么办,我被卡住了。. 以下是我的课程: ApiClient。kt ApiService.kt UserReposito
我正在努力学习改型,尽管从数据库中检索文本相当容易。我在向数据库提交数据时有点麻烦。 我提交的数据会进入数据库,但每次提交数据时都会显示此错误。toast表示-应为BEGIN_对象,但在第1行第2列路径处为字符串$ 这是我的注册API活动: 公共接口注册器API{ 这是我的个人课: 这是我的插入活动: 检索文本 以下问题的答案 我想回答我自己的问题,但我无法回答下面的问题,因为我被标记为重复。不管
我试图在android上使用谷歌的Gson和Kotlin解析以下json 我使用的模型和代码如下所示: 我希望它能正常工作,但每次反序列化时都会引发异常: Gson:java。lang.IllegalStateException:应为BEGIN_对象,但在第1行第184列路径$处为字符串。数据 我做错了什么?Gson不支持列表反序列化?
我看到这个问题很多次了,但还是不明白。看起来我在现场发送请求,但它的正文不正确。但为什么呢?可能我不清楚改造是如何工作的,但我不是只是收集请求的链接并等待服务器的答案吗?这是链接:这里 带有请求的接口 和带有基本URL的类 改装构建类 JSON是通过这个解析的 主要活动是: 日志: 那么,如果请求错误,我应该为正常工作更改什么?