使用 Scala 迭代 Seq[row] 直到满足特定条件

Iterating through Seq[row] till a particular condition is met using Scala

我需要迭代 Row 类型的 scala Seq 直到满足特定条件。我不需要进一步处理 post 条件。

我有一个seq[Row]r->WrappedArray([1/1/2020,abc,1],[1/2/2020,pqr,1],[1/3/2020,stu,0],[1/4/2020,opq,1],[1/6/2020,lmn,0])

我想遍历此集合 r.getInt(2),直到遇到 0。一旦遇到 0,我需要中断迭代并收集 r.getString(1) 直到那时。我不需要查看任何其他数据 post。

我的输出应该是:Array(abc,pqr,stu)

我是 Scala 编程的新手。这个seq实际上是一个Dataframe。我知道如何使用 Spark dataframes 处理此问题,但由于我的组织提出的一些限制,windows 函数、createDataFrame 函数在我们的环境中不是 available/working。因此,我不得不求助于 Scala 编程来实现相同的目标。

我能想到的就是下面这样的东西,但没有真正起作用!

breakable{
for(i <- r)
var temp = i.getInt(3)===0
if(temp ==true)
{
val = i.getInt(2)
break()
}
}

有人可以帮我吗!

可以使用takeWhile方法抓取值为1的元素

s.takeWhile(_.getInt(2) == 1).map(_.getString(1))

比会给你

List(abc, pqr)

因此您仍然需要获取第一个元素,其中 int 值为 0,您可以执行以下操作:

s.find(_.getInt(2)== 0).map(_.getString(1)).get

将所有内容放在一起(并处理可能的 nil 值):

s.takeWhile(_.getInt(2) == 1).map(_.getString(1)) ++ s.find(_.getInt(2)== 0).map(r => List(r.getString(1))).getOrElse(Nil)

结果:

Seq[String] = List(abc, pqr, stu)