从数据框中的两列创建列表列表 - Scala
Posted
技术标签:
【中文标题】从数据框中的两列创建列表列表 - Scala【英文标题】:Create a list of lists from two columns in a data frame - Scala 【发布时间】:2021-12-17 06:23:18 【问题描述】:我有一个数据框,其中乘客 ID 和路径是字符串。该路径代表乘客的飞行路径,因此乘客 10096 从国家 CO 出发并前往国家 BM。我需要找出每位乘客在不前往英国的情况下搭乘的最长航班数量。
+-----------+--------------------+
|passengerId| path|
+-----------+--------------------+
| 10096| co,bm|
| 10351| pk,uk|
| 10436| co,co,cn,tj,us,ir|
| 1090| dk,tj,jo,jo,ch,cn|
| 11078| pk,no,fr,no|
| 11332|sg,cn,co,bm,sg,jo...|
| 11563|us,sg,th,cn,il,uk...|
| 1159| ca,cl,il,sg,il|
| 11722| dk,dk,pk,sg,cn|
| 11888|au,se,ca,tj,th,be...|
| 12394| dk,nl,th|
| 12529| no,be,au|
| 12847| cn,cg|
| 13192| cn,tk,cg,uk,uk|
| 13282| co,us,iq,iq|
| 13442| cn,pk,jo,us,ch,cg|
| 13610| be,ar,tj,no,ch,no|
| 13772| be,at,iq|
| 13865| be,th,cn,il|
| 14157| sg,dk|
+-----------+--------------------+
我需要这样得到它。
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"))
我正在尝试使用this solution,但我无法列出此列表。似乎解决方案中使用的输入将每个国家/地区代码作为列表中的单独项目,而我的路径列将国家/地区代码列为描述飞行路径的单个元素。
【问题讨论】:
您好,欢迎 :) 请分享您对此所做的任何尝试,这将帮助其他人通过更新您的代码来提供具体答案。 【参考方案1】:如果目标只是从字符串生成目的地列表,您可以简单地使用split
:
df.withColumn("path", split('path, ","))
如果目标是在不去英国的情况下计算最大步数,您可以执行以下操作:
df
// split the string on 'uk' and generate one row per sub journey
.withColumn("path", explode(split('path, ",?uk,?")))
// compute the size of each sub journey
.withColumn("path_size", size(split('path, ",")))
// retrieve the longest one
.groupBy("passengerId")
.agg(max('path_size) as "max_path_size")
【讨论】:
以上是关于从数据框中的两列创建列表列表 - Scala的主要内容,如果未能解决你的问题,请参考以下文章