【问题标题】:Scala function to count specific occurrencesScala函数来计算特定的出现次数
【发布时间】:2021-02-04 07:43:26
【问题描述】:

我有以下火花数据框:

enter image description here

我想做的是创建一个 scala 函数/UDF,它会给我“最长运行”列。这将向我显示乘客未在英国时去过的最多的国家。例如,第一个是 : uk -> ir -> at -> uk -> ch -> pk ,正确答案是这里的 2 个国家。

我尝试创建一个函数,但如果列表中有多个“uk”或列表以“uk”开头,则该函数不起作用。

请问我该怎么办?

感谢您的支持

【问题讨论】:

    标签: scala function apache-spark-sql user-defined-functions


    【解决方案1】:

    你可以试试这个方法

    
      def longestRun(sq: Seq[String]): Int = {
        sq.mkString(" ")
          .split("UK")
          .filter(_.nonEmpty)
          .map(_.trim)
          .map(s => s.split(" ").length)
          .max
      }
    
      case class Flights(passengerID: Int, flight: Seq[String], longestRun: Int)
    
      val data = List(
        (1,List("UK","IR","AT","UK","CH", "PK")),
        (2,List("CG","IR")),
        (3,List("CG","IR","SG","BE","UK")),
        (4,List("CG","IR","NO","UK","SG","UK","IR","TJ","AT")),
        (5,List("CG","IR"))
      )
    
        import spark.implicits._
    
        val df = sc.parallelize(data)
          .toDF("passengerID", "Flight")
          .map(r => Flights(r(0).asInstanceOf[Int],r(1).asInstanceOf[Seq[String]],longestRun(r(1).asInstanceOf[Seq[String]])))
        
        df.show(truncate = false)
    
    /*
    +-----------+------------------------------------+----------+
    |passengerID|flight                              |longestRun|
    +-----------+------------------------------------+----------+
    |1          |[UK, IR, AT, UK, CH, PK]            |2         |
    |2          |[CG, IR]                            |2         |
    |3          |[CG, IR, SG, BE, UK]                |4         |
    |4          |[CG, IR, NO, UK, SG, UK, IR, TJ, AT]|3         |
    |5          |[CG, IR]                            |2         |
    +-----------+------------------------------------+----------+
    */
    

    【讨论】:

      猜你喜欢
      • 2018-10-19
      • 2022-12-22
      • 2018-04-10
      • 2021-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多