【发布时间】:2019-06-07 15:32:08
【问题描述】:
我想将 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/r"}
我使用了 Kryo 编码器,因为它无法编译,所以我找到了关于它的堆栈溢出答案……不确定它是否正确。
【问题讨论】:
标签: apache-spark apache-spark-dataset kryo