我正在使用scalahadoop版本,需要用第一个字段的前一个值填充al list。现在看起来是这样的:
List(This1, that1)
List(, that2)
List(, that3)
List(This2, that4)
List(, that1)
我希望它看起来像这样:
List(This1, that1)
List(This1, that2)
List(This1, that3)
List(This2, that4)
List(This2, that1)
更新:我有一个演员和电影文本文件,我需要这样得到它:
[(演员1,电影1),(演员1,电影2),(演员2,电影3),(演员3,电影2),(演员4,电影3),(演员4,电影1)]
文本文件如下所示(其中|表示区分演员和电影的“选项卡”)。正如您所看到的,演员可以有多部电影,在电影之前不会提及演员。
$, Claw | "OnCreativity" (2012) [Himself]
$, Homo | Nykytaiteen museo (1986) [Himself] <25>
| Suuri illusioni (1985) [Guests] <22>
$, Steve | E.R. Sluts (2003) (V) <12>
$hort, Too | 2012 AVN Awards Show (2012) (TV) [Himself - Musical Guest]
| 2012 AVN Red Carpet Show (2012) (TV) [Himself]
所以我做了这个动作(演员之间也有空行,所以这就是!\。(空筛选器):
val test=actors.filter(!\。isempty).map(line=>line.split(“\t+”).tolist)
这将创建上面的列表。我对scala还很陌生,所以我真的不知道该怎么说。
2条答案
按热度按时间kiz8lqtg1#
这里有一个解决方案
首先,列出我认为你在拆分后得到的结果:
然后代码-在
foldLeft
,我们保留了一个到目前为止的结果列表(相反,为了提高效率),以及当前用于填充找到的第一个空条目的值。如果我们得到一个非空的值,我们用非空的第一个条目替换该值,否则我们继续使用它。这个._1.reverse
最后,按照正确的顺序从结果中检索修改后的列表。kdfy810k2#
你的数据结构很模糊,所以我要为你假设一些事情。
演员是一根弦,电影是一根弦。每一行表示为一对(演员、电影),您有一个这样的对的列表。在一些配对中,演员是一个空字符串
""
. 您需要规范化列表,以便将空字符串替换为前一对中的参与者。如果初始对有一个空的actor字段,那么这样做显然是不对的,但是您可以添加一些防弹措施。