【发布时间】:2019-11-02 16:17:12
【问题描述】:
我在 scala 中有一个函数,我向它发送参数,我这样使用它:
val evega = concat.map(_.split(",")).keyBy(_(0)).groupByKey().map{case (k, v) => (k, f(v))}
我的函数 f 是:
val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd")
implicit val localDateOrdering: Ordering[LocalDate] = Ordering.by(_.toEpochDay)
def f(v: Array[String]): Int = {
val parsedDates = v.map(LocalDate.parse(_, formatter))
parsedDates.max.getDayOfYear - parsedDates.min.getDayOfYear}
这是我得到的错误:
found : Iterable[Array[String]]
required: Array[String]
我已经尝试过使用:
val evega = concat.map(_.split(",")).keyBy(_(0)).groupByKey().map{case (k, v) => (k, for (date <- v) f(date))}
但我遇到大量错误。
为了得到更好的图片,concat中的数据是:
1974,1974-06-22
1966,1966-07-20
1954,1954-06-19
1994,1994-06-27
1954,1954-06-26
2006,2006-07-04
2010,2010-07-07
1990,1990-06-30
...
它是 RDD[String] 类型。 我怎样才能正确地对其进行迭代并从该函数 f 中获取单个 Int?
【问题讨论】:
-
你能提供一些示例数据吗?如果人们知道您正在处理的数据的格式,这将更容易回答。具体来说
concat的内容结构。
标签: scala apache-spark rdd