我正在尝试利用存储在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文件。
答案 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()
}