使用 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)
我需要迭代 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)