sparksql将数据帧转换为json

时间:2016-06-14 11:33:50

标签: json apache-spark

我的要求是将dataframe作为输入参数传递给scala类,该类将json格式的数据保存到hdfs。

输入参数如下所示:

case class ReportA(
                  parm1: String,
                  parm2: String,
                  parm3: Double,
                  parm4: Double,
                  parm5: DataFrame
                  )

我为这个参数创建了一个JSON对象,如:

def write(xx: ReportA) = JsObject(
      "field1" -> JsString(xx.parm1),
      "field2" -> JsString(xx.parm2),
      "field3" -> JsNumber(xx.parm3),
      "field4" -> JsNumber(xx.parm4),
      "field5" -> JsArray(xx.parm5)
    )

parm5是一个数据帧,想要转换为Json数组。

如何将数据帧转换为Json数组?

感谢您的帮助!!!

1 个答案:

答案 0 :(得分:2)

可以看到DataFrame相当于数据库中具有行和列的普通旧表。你不能从中获得一个简单的数组,你最接近数组的将是以下结构:

EditText myEditText = (EditText) findViewById(R.id.myEditText);

要实现类似的结构,您可以使用DataFrame API的[ "col1": [val1, val2, ..], "col2": [val3, val4, ..], "col3": [val5, val6, ..] ] 方法获取toJSON,然后对其RDD<String>进行操作(注意任何collect }例外)。

您现在拥有OutOfMemory,根据您使用的JSON库,您只需在Array[String]中进行转换即可。

请注意,这似乎是使用Spark的一种非常奇怪的方式,您通常不会将RDD或DataFrame直接输出并转换为其中一个对象,您通常会将其溢出到存储解决方案中。