如何在foreachPartition中将Rows转换为JSON?

时间:2017-07-18 22:03:07

标签: scala apache-spark dataframe apache-spark-sql

有没有办法在foreachPartition中将Row转换为JSON? 我看过How to convert Row to json in Spark 2 Scala。 但是这种方法不起作用,因为我无法从foreachPartition中访问sqlContext,而且我的数据也包含嵌套类型。

 dataframe.foreachPartition { partitionOfRecords =>

    ..
    val connectionString: ConnectionStringBuilder = new ConnectionStringBuilder(
                eventHubsNamespace,
                eventHubName,
                policyName,
                policyKey)

    val eventHubsClient: EventHubClient = EventHubClient.createFromConnectionString(connectionString.toString()).get()

    val json = /* CONVERT partitionOfRecords to JSON */

    val bytes = json.getBytes()
    val eventData = new EventData(bytes)
    eventHubsClient.send(eventData)
  }

1 个答案:

答案 0 :(得分:3)

我强烈建议您在 foreachPartition之前转换为JSON

原因是functions对象中存在对JSON的内置支持,您可以使用它来构建"字符串化"使用to_json函数的JSON(不需要恢复相当复杂的编码)。

  

to_json(e:列):列将包含StructTypeArrayType StructTypes的列转换为具有指定架构的JSON字符串。< / p>

我建议您执行以下操作:

dataframe.
  select(to_json($"your-struct-column-here")).
  as[String].
  foreachPartition { json: String => ... }