基于spark中的其他列值更新列中的值

y0u0uwnf  于 2021-07-12  发布在  Spark
关注(0)|答案(2)|浏览(304)

我想基于行中任意数量的其他列的值来设置sparkDataframe中的列的值。
我意识到我可以这样做:

df.withColumn("IsValid", when($"col1" === $"col2" && $"col3" === $"col4", true).otherwise(false))

但对于20+列的Dataframe,必须有更好的方法来实现这一点。
该行包含偶数个列,为了知道“isvalid”列是否正确,应该成对检查这些列 true 或者 false .

4urapxun

4urapxun1#

您可以尝试将列列表Map并减少到所需的条件:

val cond = (0 to df.columns.length - 1 by 2)
           .map(i => (col(df.columns(i)) === col(df.columns(i+1))))
           .reduce(_ && _)

df.withColumn("IsValid", when(cond, true).otherwise(false))
vfh0ocws

vfh0ocws2#

将列成对分组并构造when函数的条件的另一种方法:

val condition = df.columns.grouped(2).map{ case Array(a, b) => col(a) === col(b)}.reduce(_ and _)

val df1 = df.withColumn("IsValid", when(condition,true).otherwise(false))

相关问题