Apache spark Spark:根据条件使用列表中的值更新列

Apache spark Spark:根据条件使用列表中的值更新列,apache-spark,Apache Spark,对于下面给定的输入df,我尝试在spark中输出低于输出df的值,即在输出df中添加新列“new1”,并且new1列的值应为,如果它们小于fn值和id值,则它应该包含前面所有行的fn列值的非值 input df: +---+---+ | id| fn| +---+---+ | 1| 0| | 1| 0| | 2| 0| | 2| 0| | 3| 4| | 5| 0| | 5| 0| | 6| 7| +---+---+ output wanted is: +---

对于下面给定的输入df,我尝试在spark中输出低于输出df的值,即在输出df中添加新列“new1”,并且new1列的值应为,如果它们小于fn值和id值,则它应该包含前面所有行的fn列值的非值

input df:
+---+---+
| id| fn|
+---+---+
|  1|  0|
|  1|  0|
|  2|  0|
|  2|  0|
|  3|  4|
|  5|  0|
|  5|  0|
|  6|  7|
+---+---+

output wanted is:
+---+---+----+
| id| fn|new1|
+---+---+----+
|  1|  0|   4|
|  1|  0|   4|
|  2|  0|   4|
|  2|  0|   4|
|  3|  4|   4|
|  5|  0|   7|
|  5|  0|   7|
|  6|  7|   7|
+---+---+----+
谢谢你的回复。 我使用了udf(我也可以使用上面的第一个回复,但因为我有更多的逻辑要合并,所以我使用udf来方便阅读)

我所做的代码如下所示,对于我的问题来说效果很好

val df = Seq((1, 0), (1, 0), (2, 0), (2, 0), (3, 4),(5, 0), (5, 0), (6, 7)).toDF("id", "fn")

        val df1 = df.filter(df("fn") > 0)
        val fn_value_list = df1.select("fn").rdd.map(r => r(0)).collect.toList 
        fn_value_list.foreach(println)

        def udfFunc(idval : Int, fnval : Int) : Int = { 
                for(fn_val_list <- fn_value_list) {
                        if(idval <= fn_val_list.asInstanceOf[Int] &&  fnval <= fn_val_list.asInstanceOf[Int])
                                return fn_val_list.asInstanceOf[Int]
                }   
                return fnval
        }   
        val myUdf = udf(udfFunc _)
        var df10 = df.withColumn("new1", myUdf(df("id"), df("fn")))
        df10.show
val df=Seq((1,0)、(1,0)、(2,0)、(2,0)、(3,4)、(5,0)、(5,0)、(6,7)).toDF(“id”、“fn”)
val df1=df.过滤器(df(“fn”)>0)
val fn_value_list=df1.select(“fn”).rdd.map(r=>r(0)).collect.toList
fn\u值\u列表。foreach(println)
def udfFunc(idval:Int,fnval:Int):Int={

对于(fn_val_list)为什么不使用
withColumn
with
when
df.withColumn(“new1”),when(col”(“fn”)如果列表中有多个元素呢?我们可以举个例子吗?问题不清楚,请编辑您的问题并在那里添加详细信息,然后删除此答案。