如果选项类型为None,则使用getOrElse不返回任何内容(Scala)

问题描述 投票:0回答:1

我正在使用 RDD 创建一个左外连接,因为到目前为止,我有以下结果。

scala> LeftJoinedDataset.foreach(println)
(300000004,Trevor,Parr,Some((35  Jedburgh Road,PL23 6BA)))
(300000006,Ava,Coleman,None)
(200000008,Lisa,Knox,None)
(100000007,Dorothy,Thomson,None)
(400000002,Jasmine,Miller,Some((68  High Street,LE16 3PH)))
(300000009,Ruth,Campbell,None)
(100000005,Deirdre,Pullman,Some((63  Crown Street,SW99 2HY)))
(100000010,Dominic,Parr,None)
(100000001,Simon,Walsh,Some((99  Newgate Street,PA5 9UY)))
(100000003,Liam,Brown,Some((9  Earls Avenue,ML12 2DY)))

为了删除None和Some,我使用了下面的getOrElse代码。

scala> val LeftJoinedDataset = LeftJoin.map(x=>(x._1,x._2._1._1,x._2._1._2,x._2._2.getOrElse(None)))

打印出来的结果是:

scala> LeftJoinedDataset.foreach(println)
(300000004,Trevor,Parr,(35  Jedburgh Road,PL23 6BA))
(300000006,Ava,Coleman,None)
(200000008,Lisa,Knox,None)
(100000007,Dorothy,Thomson,None)
(400000002,Jasmine,Miller,(68  High Street,LE16 3PH))
(300000009,Ruth,Campbell,None)
(100000005,Deirdre,Pullman,(63  Crown Street,SW99 2HY))
(100000010,Dominic,Parr,None)
(100000001,Simon,Walsh,(99  Newgate Street,PA5 9UY))
(100000003,Liam,Brown,(9  Earls Avenue,ML12 2DY))

虽然Some已经消失了,但我还是想删除None,不返回任何数据。例如

(300000006,Ava,Coleman) 而不是 (300000006,Ava,Coleman,None)

我如何才能做到这一点?

非常感谢

scala join rdd
1个回答
1
投票

你不能在同一数据集的不同行中有不同数量的列,所以你必须完全删除该列,所有处理选项值,或者用其他东西填充它们(例如空字符串)。Option 在这一栏中似乎是最好的方式--它将向消费者展示,这些数据可能不存在。

© www.soinside.com 2019 - 2024. All rights reserved.