使用scala遍历seq[row],直到满足特定条件

zzwlnbp8  于 2021-05-18  发布在  Spark
关注(0)|答案(1)|浏览(1065)

我需要迭代一个
scala SeqRow 键入直到满足特定条件。我不需要进一步处理后的条件。
我有一个
seq[Row] r -> WrappedArray([1/1/2020,,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) 在那之前。我不需要查任何其他的数据。
我的输出应该是: Array(,pqr,stu) 我是scala编程的新手。这个 seq 实际上是一个 Dataframe . 我知道怎么用Spark处理这个 dataframes ,但由于我的组织提出了一些限制, windows 功能, createDataFrame 功能不可用/在我们的环境中工作。因此我不得不求助于 Scala 编程实现相同。
我能想到的只是下面这样的东西,但不是真的有用!

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

有人能帮帮我吗!

ghhkc1vu

ghhkc1vu1#

你可以用 takeWhile 方法在元素的值为1时获取元素

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

会给你什么

List(abc, pqr)

因此,您仍然需要获取int值为0的第一个元素,您可以按如下方式执行:

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

综合起来(并处理可能的零值):

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)

相关问题