代码之家  ›  专栏  ›  技术社区  ›  Jay Vignesh

Scala如何在列表[行]中找到最大整数

  •  -1
  • Jay Vignesh  · 技术社区  · 6 年前

    让我们把清单列出来吧

    val list = List([80], [79], [92])
    

    1 回复  |  直到 6 年前
        1
  •  3
  •   SCouto    6 年前

    Row 将只包含 Ints ,可以将其转换为 Seq max

    list.flatMap(_.toSeq.asInstanceOf[Seq[Int]]).max
    

    快速示例:

    import org.apache.spark.sql.Row
    val list: List[Row] = List(Row(1), Row(2))
    List[org.apache.spark.sql.Row] = List([1], [2])
    
    
    scala> list.flatMap(_.toSeq.asInstanceOf[Seq[Int]]).max
    Int = 2
    

    编辑

    import scala.util.parsing.json.JSON
    
    
    
     val list = List(Row("""{"name":"abc","salary":"2000","id":"1","timeStamp" : "1528725600000"}"""))
    
    
    
    list.map(r => JSON.parseFull(r.getString(0)))
    .map(x => x.flatMap[Any]({
                  case x: Map[String, _] => x.get("timeStamp")
                  case _ => None
              }))
    .map(x => x match {
              case Some(i: String) => i 
              case _ => "" })
    .max
    
    • 第一个映射将把行中的json解析为一个映射
    • 第二个将只从该映射中获取时间戳
    • 第三个映射将处理作为选项[Any]出现的时间戳,并将其转换为字符串
    • 最后,max将获得所有接收到的时间戳的最大值