Я хотел преобразовать данные CSV в определенный формат JSON, а не в обычную плоскую вещь. Поэтому я попробовал следующее:
case class CityInfo(lat : Double, long : Double)
case class City(name: String, country: String, info : CityInfo)
implicit def kryoEncoder[A](implicit ct: ClassTag[A]) =
org.apache.spark.sql.Encoders.[A](ct)
val cities = spark.read.option("header", true).csv("src/main/resources/worldcities.csv").cache()
cities.map {
case Row(city: String, _: Any, latStr : String, long : String, country: String, _*) =>
City(city, country, CityInfo(latStr.toDouble, long.toDouble))
}.write.json("data/testfile.json")
Исходя из этого, я ожидаю, что строки json будут иметь вложенный объект (например, City и CityInfo). Но я получаю строки вроде:
{ "значение": "AQBjb20uaGIuZXhlcmNpc2UuU3AxJENpdPkBAUtvc2927wEBY29tLmhiLmV4ZXJjaXNlLlNwMSRDaXR5SW5m7wFARXULDye7MEA0sJAt4A0bAVp1YmluIFBvdG / г"}
Я использовал кодер Kryo, так как он не компилировался, поэтому я нашел ответ о переполнении стека ... не уверен, что это правильно.