从数据框中的两列创建列表列表 - 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的主要内容,如果未能解决你的问题,请参考以下文章

试图在r中隔离数据框中的两列[重复]

如何合并熊猫数据框中的两列,堆叠在顶部

如何在 Pandas 中连接包含列表(系列)的两列

需要合并数据框中的两列[重复]

如何比较数据框中的两列,检查它们之前是不是存在?

连接熊猫数据框中的两列