【发布时间】:2019-06-17 07:00:44
【问题描述】:
我需要根据其中一个列的条件交换多个列的值,并使用 API 而不是 sparkQL
我有一个包含 [A,B,C,X,Y,Z] 列的 DataFrame,它的行具有这种模式:
(1,2,3,null,null,null),
(3,3,3,null,null,null),
(null,null,null,5,3,2),
(3,1,1,null,null,null),
(null,null,null,3,4,1)
当任何行的条件是 A 列中的值为空时,我想实现在列组 (a,b,c) 和 (x,y,z) 之间交换值。所以在执行之后,表应该只有 [A,B,C] 列中的值。我试图做类似的事情
val result = df.withColumn("A", when(col("A").isNull, col("X")).withColumn("X", when(col("A").isNull,lit(null)).withColumn("B", when(col("A").isNull, col("Y")).withColumn("Y", when(col("A").isNull,lit(null)).withColumn("C", when(col("A").isNull, col("Z")).withColumn("Z", when(col("A").isNull,lit(null)).
令人惊讶的是只执行了这个:
val 结果 = df.withColumn("A", when(col("A").isNull, col("X")).withColumn("X", when(col("A").isNull,点亮(空))
我得到了使用该行“(5,null,null,null,3,2)”定义的列交换的预期结果。但是当我为其他 2 列添加操作“withColumn”时,我最终得到了像这样的行“(5,null,null,null,3,2)”
任何帮助将不胜感激。
【问题讨论】: