我一直在使用 Scala 中的天气数据进行一些自主学习,因为这些数据是免费的、庞大的,并且可以用于我想做的许多其他事情。我立即遇到了如何表示超过 22 列的文本文件中的数据的问题。
处理超过 22 列的数据的惯用方式是什么?我一直在尝试阅读 NOAA 的NWS-USAF-NAVY 电台列表,他们每条线路有 32 条信息。
我最初的倾向是使用案例类,但定义它们的最直接方式是:
/*
first goal is to be able to read the inventory of WBAN stations from NOAA at
ftp.ncdc.noaa.gov/pub/data/inventories/WBAN.TXT
formats are listed in:
ftp://ftp.ncdc.noaa.gov/pub/data/inventories/WBAN-FMT.TXT
although I don't think that file is completely right
*/
case class WBAN(
CoopStationID: Option[String], // 01 - 06 Coop Station Id
ClimateDivision: Option[String], // 08 - 09 Climate Division
WBANStationID: Option[String], // 11 - 15 WBAN Station Id
WMOStationID: Option[String], // 17 - 21 WMO Station Id
FAALOCID: Option[String], // 23 - 26 FAA LOC ID
// and so on, for 32 elements!
不允许,因为 scala 不允许超过 22 个项目的案例类,因为它使用元组来表示数据。
嵌套元组似乎是一种可能的解决方案,因此可以嵌套诸如纬度、经度、海拔等之类的内容,而不是为 NOAA 列出的每个项目设置一个字段:
// class representing a latitude or longitude's information
case class DMS(
Degrees: Int,
Minutes: Int,
Seconds: Int
)
// class combining a lat lon with elevation data
case class LatLonElevation(
Latitude: DMS,
Longitude: DMS,
LatLonPrecision: String,
ElevationGround: Option[Int],
Elevation: Option[Int],
ElevationTypeCode: Option[Int]
)
或者你把它放到一个地图中,每个值都有一个向量?
似乎应该有一种简洁的方式来做到这一点,但是在实现它之后,我最终以不同的格式重复了相当多的含义,这非常难看。是否有某种方法可以使用 SLICK 或其他库导入此类数据,或者它是否具有与案例类相同的限制?顺便说一句,使用lazy val、Future 或其他库来处理连接更好吗?