将json数据添加到scala中的多行字符串以使用spark进行处理

时间:2018-02-01 19:39:19

标签: json scala apache-spark jackson

我正在尝试利用存储在s3上的json文件中的多行单个json对象中的一些参数。但是,因为我面临着阅读和解析json in spark的几个问题(老实说,它的痛苦......),我尝试使用jackson转换为硬编码的多线json来映射为:

以下是我的json硬编码为多行字符串:

val jsonString = 
    """
        {
          myJSON
        }
    """

我用杰克逊活页夹解码它:

    val mapper = new ObjectMapper
    mapper.registerModule(DefaultScalaModule)
    mapper.readValue(jsonString, classOf[Map[String, String]])

现在我可以非常轻松地使用地图了。不幸的是,所有的代码库都使用了一个map,因此这个方法对我来说似乎更好。

所以我想知道是否有办法在spark-scala中创建一个带有json文件的多行字符串?我将从s3中获取我的json文件。

1 个答案:

答案 0 :(得分:0)

如果你不受杰克逊的束缚,那么你可以尝试使用jsoniter_scala轻松快捷地完成任务。将dependencies添加到您的构建脚本中。像这里导入和使用它们:

// import required packages
import java.io._
import com.github.plokhotnyuk.jsoniter_scala.macros._
import com.github.plokhotnyuk.jsoniter_scala.core._

// create JSON codec for your map
val codec = JsonCodecMaker.make[Map[String, String]](CodecMakerConfig())

// then read JSON file using it
val map = {
  val in: InputStream = // <- here can be any input stream implementation, no buffering required 
    new FileInputStream("/tmp/input.json")
  try JsonReader.read(codec, in)
  finally in.close()
}