我有一个数据框,我想添加另一个列,前n行是一个值,其余的是另一列中的值...像这样的
frame.select("*")
.withColumn("newColumn", if(row number < 5) "hello, world" else col("someth_else"))
答案 0 :(得分:3)
If you are using spark >= 2.x,您可以使用monotonically_increasing_id()
为数据框创建行索引,然后使用when.otherwise
根据条件(row_number)有条件地创建新列:
val df = Seq(1,3,5,7,8).toDF("A")
df.withColumn("rn", monotonically_increasing_id()).
withColumn("new", when($"rn" <= 2, lit("hello world")).otherwise($"A")).show
+---+---+-----------+
| A| rn| new|
+---+---+-----------+
| 1| 0|hello world|
| 3| 1|hello world|
| 5| 2|hello world|
| 7| 3| 7|
| 8| 4| 8|
+---+---+-----------+