使用Scala遍历Seq[row]直到满足特定条件
我需要迭代使用Scala遍历Seq[row]直到满足特定条件,scala,loops,apache-spark,seq,Scala,Loops,Apache Spark,Seq,我需要迭代行类型的scalaSeq,直到满足特定条件。我不需要进一步处理后的条件 我有一个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),直到那时。我不需要查看任何其他数据 我的输出应该是:数组(abc、pqr
行
类型的scala
Seq
,直到满足特定条件。我不需要进一步处理后的条件
我有一个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)
,直到那时。我不需要查看任何其他数据
我的输出应该是:数组(abc、pqr、stu)
我是scala编程新手。这个seq
实际上是一个Dataframe
。我知道如何使用SparkDataFrame
处理此问题,但由于我的组织提出了一些限制,windows
函数,createDataFrame
函数在我们的环境中不可用/无法工作。因此,我不得不求助于Scala
编程来实现同样的目标
我所能想到的只是下面这样的东西,但并没有真正起作用
breakable{
for(i <- r)
var temp = i.getInt(3)===0
if(temp ==true)
{
val = i.getInt(2)
break()
}
}
breakable{
对于(i您可以使用takeWhile
方法在元素值为1时获取元素
s.takeWhile(_.getInt(2) == 1).map(_.getString(1))
我会给你的
List(abc, pqr)
因此,您仍然需要获取int值为0的第一个元素,您可以按如下操作:
s.find(_.getInt(2)== 0).map(_.getString(1)).get
综合起来(并处理可能的零值):
结果:
Seq[String] = List(abc, pqr, stu)
当元素的值为1时,可以使用takeWhile
方法获取元素
s.takeWhile(_.getInt(2) == 1).map(_.getString(1))
我会给你的
List(abc, pqr)
因此,您仍然需要获取int值为0的第一个元素,您可以按如下操作:
s.find(_.getInt(2)== 0).map(_.getString(1)).get
综合起来(并处理可能的零值):
结果:
Seq[String] = List(abc, pqr, stu)
使用不带窗口功能的时间序列…使用不带窗口功能的时间序列是一家非常有趣的公司…使用该解决方案是一家非常有趣的公司!谢谢!只是出于好奇,是否可以将不同的记录放入列表中?类似collect_set()的内容?那么你想要一个列表吗?很抱歉,如果我没有得到它,请提供一个你希望得到什么的示例解决方案有效!谢谢!只是出于好奇,是否可以将不同的记录放入列表中?类似collect_set()的内容?那么你想要一个列表?很抱歉,如果我没有得到它,请提供一个你希望得到什么的例子