我的Spark流应用程序中有一个RDD [twitter4j.Status](来自Spark API中的TwitterUtils),我想将其转换为下面的json,其中Id将是(status => status.getId()。toString )和Text将是(status => status.getText())
我尝试了一些方法,但我对结果不满意,并且想知道是否有一种非常有效的方法可以做到这一点。
{
"Inputs": [{
"Id": "1",
"Text": "hello world"
},
{
"Id": "2",
"Text": "hello foo world"
},
{
"Id": "three",
"Text": "hello my world"
}]
}
答案 0 :(得分:0)
最后,我创建了两个java类Input和InputsValue,并利用com.google.code.gson:gson:2.6.2将对象转换为Json字符串。 为什么选择Java类而不是scala类?因为gson支持List,其中T是一个自定义对象,例如与spray-io相比,很容易使用Java类。我可能错了,但这是我到目前为止所发现的。
public class Input {
public Input(String id, String text) {
this.Id = id;
this.Text = text;
}
public String Id;
public String Text;
}
public class InputsValue {
public InputsValue(List<Input> inputs) {
this.Inputs = inputs;
}
public List<Input> Inputs;
}
val i1 = rdd.map(o => new Input(o.getId().toString, o.getText())).collect().toList;
val iv1: InputsValue = new InputsValue(i1)
val inputs = gson.toJson(iv1)