【发布时间】:2016-04-17 02:14:52
【问题描述】:
在我的 spark 代码中,我有 gson,它存储在字符串 RDD 中,我将其转换为键和值。
JavaPairRDD<String, ArrayList<Guid>> docPairRDD = docRDD.mapToPair(SparkCustomFunctions.generateKeyValuePair());
/**
* @return new Tuple with key is of type String and value is of type ArrayList<DocId>
*/
public static PairFunction<String, String, ArrayList<DocId>> generateKeyValuePair() {
return new PairFunction<String, String, ArrayList<DocId>>(){
private static final long serialVersionUID = 9086064488812696200L;
public Tuple2<String, ArrayList<DocId>> call(String t)
throws Exception {
GsonBuilder gson = new GsonBuilder();
Document tempObj = gson.create().fromJson(t, Document.class);
return new Tuple2<String, ArrayList<DocId>>(tempObj.getKey(),(ArrayList<DocId>) tempObj.getEventFields());
}
};
}
}
以下是上述函数中使用的类说明
(1).
public class Document implements Serializable {
private static final long serialVersionUID = 1L;
@SerializedName("key")
String key;
@SerializedName("eventFields")
List<DocId> eventFields= new ArrayList<DocId>();
public Document (String key, List<DocId> eventFields) {
super();
this.key = key;
this.eventFields= eventFields;
}
Its setter and getter
}
(2).
public class DocId implements Serializable {
private static final long serialVersionUID = 1L;
String DocId = "";
String cType = "";
String events;
public DocId(String docId, String cType, String eType){
super();
this.DocId = docId;
this.cType = cType;
this.events = eType;
}
their setters and getters
}
但我收到以下错误 com.google.gson.JsonSyntaxException:java.io.EOFException:第 1 行第 2 列输入结束 在 com.google.gson.Gson.fromJson(Gson.java:813) 在 com.google.gson.Gson.fromJson(Gson.java:768) 在 com.google.gson.Gson.fromJson(Gson.java:717) 在 com.google.gson.Gson.fromJson(Gson.java:689)
我是 gsona 和 spark 的新手。所以请让我知道我做错了什么?
我将以下类型的 json 存储到 RDD 中
{
"key": "01key",
"eventFields": [
{
"guid": "abc12",
"contentType": "dummyContent",
"events": "dummyEvents"
}
]
}
【问题讨论】:
-
“第 1 行第 2 列输入结束” 听起来您的字符串实际上只是
{,而不是您显示的整个 JSON。 调试您的代码以确认正在解析的值。 -
你的 DocId 类属性也应该有 @SerializedName 注释来匹配 JSON
-
你好丹尼尔,我的内部 json 在课堂上匹配。这就是输入 json 的样子。 { "key": "01key", "eventFields": [ { "DocId": "abc12", "cType": "dummyContent", "events": "dummyEvents" } } }
-
@Andreas,我不确定你的建议。我看到了我的输入文件,它是 { "key":"Value", "eventFields":[ { "DocId":"dummy1","cType":"dummyC","events":"dummyE"},{ .......},{.........}]}
-
@user2844511 您的文件可能有该内容,但是当您调用
fromJson()时,t的值是多少?
标签: java apache-spark gson unmarshalling android