【发布时间】:2021-01-13 08:20:29
【问题描述】:
我创建了以下案例类:
case class Data(ads:Option[Ads])
case class Ads(subject: Option[String]
, body:Option[String]
, price:Option[Int]
, location:Option[Location]
, attribut:Option[Seq[Attribut]]
)
case class Location(city:Option[String]
, zipcode:Option[String])
case class Attribut(key_label:Option[String]
, value_label:Option[String]
)
我使用播放框架解析 JSON 格式(HTML 的一部分)。
我终于得到了一个对象广告
JsSuccess(Ads(Some("Subject"), SOme("Body"), Some(Price), Some(Location(Some("City"), Some("Zipcode")), Some(Attribut("key_label", "value_label"))
我想通过以下方式将其保存在 CSV 文件中:
Subject Body Price City Zipcode Key_Label Value_Label
Play Playing games 532 Geneve 95 GEN Gen2
我将对象转换为Ads(Some("Subject"), Some("Body"), Some(Price), Some(Location(Some("City"), Some("Zipcode")), Some(Attribut("key_label", "value_label") 的列表并将此列表转换为DataFrame。
但我只有一列 Value 包含对象的所有元素。
Value
(Some("Subject"), SOme("Body"), Some(Price), Some(Location(Some("City"), Some("Zipcode")), Some(Attribut("key_label", "value_label")
请问有人有想法吗? 我真的不明白如何将 scala 对象与数据集和数据框链接起来。 感谢您的帮助。
【问题讨论】:
-
您是如何将
List转换为DataFrame的?另外,我相信编写本地 CSV 文件而不是提取 Spark 会有更好的选择。 -
不清楚为什么要使用带有单个 JSON 文件的 Spark。如果你这样做
df.printSchema()它可能表明它有单列Value这是一个结构。如果是,您只需将其拆包/展平即可。您可以使用.withColunn(...,...)解包或如上例中那样展平 -
感谢您的回答。我终于认为没有必要使用Spark。我想要转换 JsSuccess(Ads(Some("Subject"), SOme("Body"), Some(Price), Some(Location(Some("City"), Some("Zipcode")), Some(Attribut(将“key_label”、“value_label”)) 转换为 7 列的 CSV 文件:主题、正文、价格、城市、邮政编码、Key_Label 和 Key_value。有什么想法吗?
-
我确实喜欢这样:implicit class CSVWrapper(val prod: Product) extends AnyVal { def toCSV: String = prod.productIterator.map{ case p: Product => p.toCSV case rest => rest }.mkString("|") }
标签: json scala dataframe apache-spark playframework