将RDD [Status]转换为特定json的最有效方法

时间:2016-03-13 17:09:38

标签: json scala apache-spark

我的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"
    }]
}

1 个答案:

答案 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)