Scala函数来统计特定的事件

Scala函数来统计特定的事件,scala,function,apache-spark-sql,user-defined-functions,Scala,Function,Apache Spark Sql,User Defined Functions,我有以下spark数据框: 我想做的是创建一个scala函数/UDF,它将为我提供“最长运行时间”列。这将向我展示一名乘客在没有英国的情况下去过的最多国家。例如,第一个是:uk->ir->at->uk->ch->pk,正确答案是这里有两个国家 我试图创建一个函数,但如果列表中有多个“uk”或列表以“uk”开头,则该函数不起作用 请问我该怎么办 感谢您的支持您可以尝试这种方法 def longestRun(sq:Seq[String]):Int={ sq.mkString(“”) .split

我有以下spark数据框:

我想做的是创建一个scala函数/UDF,它将为我提供“最长运行时间”列。这将向我展示一名乘客在没有英国的情况下去过的最多国家。例如,第一个是:uk->ir->at->uk->ch->pk,正确答案是这里有两个国家

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

请问我该怎么办


感谢您的支持

您可以尝试这种方法


def longestRun(sq:Seq[String]):Int={
sq.mkString(“”)
.split(“英国”)
.filter(u.nonEmpty)
.map(u.trim)
.map(s=>s.split(“”).length)
麦克斯先生
}
案例类航班(旅客:Int,航班:Seq[String],longestRun:Int)
val数据=列表(
(1,列表(“英国”、“爱尔兰”、“AT”、“英国”、“CH”、“PK”)),
(2,列表(“CG”、“IR”),
(3,列表(“CG”、“IR”、“SG”、“BE”、“UK”),
(4,列表(“CG”、“IR”、“NO”、“UK”、“SG”、“UK”、“IR”、“TJ”、“AT”)),
(5,列表(“CG”、“IR”))
)
导入spark.implicits_
val df=sc.parallelize(数据)
.toDF(“乘客”、“航班”)
.map(r=>Flights(r(0).asInstanceOf[Int],r(1).asInstanceOf[Seq[String]],longestRun(r(1).asInstanceOf[Seq[String]]))
df.show(truncate=false)
/*
+-----------+------------------------------------+----------+
|passengerID |航班| longestRun|
+-----------+------------------------------------+----------+
|1 |[UK,IR,AT,UK,CH,PK]|2|
|2 |[CG,IR]| 2|
|3 |[CG、IR、SG、BE、英国]| 4|
|4 |[CG,IR,NO,UK,SG,UK,IR,TJ,AT]| 3|
|5 |[CG,IR]| 2|
+-----------+------------------------------------+----------+
*/

您可以尝试这种方法


def longestRun(sq:Seq[String]):Int={
sq.mkString(“”)
.split(“英国”)
.filter(u.nonEmpty)
.map(u.trim)
.map(s=>s.split(“”).length)
麦克斯先生
}
案例类航班(旅客:Int,航班:Seq[String],longestRun:Int)
val数据=列表(
(1,列表(“英国”、“爱尔兰”、“AT”、“英国”、“CH”、“PK”)),
(2,列表(“CG”、“IR”),
(3,列表(“CG”、“IR”、“SG”、“BE”、“UK”),
(4,列表(“CG”、“IR”、“NO”、“UK”、“SG”、“UK”、“IR”、“TJ”、“AT”)),
(5,列表(“CG”、“IR”))
)
导入spark.implicits_
val df=sc.parallelize(数据)
.toDF(“乘客”、“航班”)
.map(r=>Flights(r(0).asInstanceOf[Int],r(1).asInstanceOf[Seq[String]],longestRun(r(1).asInstanceOf[Seq[String]]))
df.show(truncate=false)
/*
+-----------+------------------------------------+----------+
|passengerID |航班| longestRun|
+-----------+------------------------------------+----------+
|1 |[UK,IR,AT,UK,CH,PK]|2|
|2 |[CG,IR]| 2|
|3 |[CG、IR、SG、BE、英国]| 4|
|4 |[CG,IR,NO,UK,SG,UK,IR,TJ,AT]| 3|
|5 |[CG,IR]| 2|
+-----------+------------------------------------+----------+
*/