Apache spark 火花使柱增加另一柱
数据源是:Apache spark 火花使柱增加另一柱,apache-spark,apache-spark-mllib,Apache Spark,Apache Spark Mllib,数据源是: col1 ------ false false true false false true true false 我添加了一个新列,若col1的值为true,则col2的值增加1。 我期望: col1,col2 -- false,0 false,0 true,1 false,1 false,1 true,2 true,3 false,3 如何添
col1
------
false
false
true
false
false
true
true
false
我添加了一个新列,若col1的值为true,则col2的值增加1。
我期望:
col1,col2
--
false,0
false,0
true,1
false,1
false,1
true,2
true,3
false,3
如何添加此功能?可以使用窗口功能:
val df = Seq(false, false, true, false, false, true, true, false).toDF("col1")
val ordered = df
.withColumn("id", monotonically_increasing_id())
.withColumn("increment", when($"col1" === true, 1).otherwise(0))
val idWindow = Window.orderBy("id").rowsBetween(Window.unboundedPreceding, Window.currentRow)
val result = ordered.select($"col1", sum($"increment").over(idWindow).alias("col2"))
输出:
+-----+----+
|col1 |col2|
+-----+----+
|false|0 |
|false|0 |
|true |1 |
|false|1 |
|false|1 |
|true |2 |
|true |3 |
|false|3 |
+-----+----+
df.withColumn(“col2”,当($“col1”==true,1)。否则($“col2”)@pasha701 col2不仅仅是1或0,它可能是2或3…,它就像一个递增的iddf.withColumn(“col2”),当($“col1”==true,$“col2”+lit(1))。否则($“col2”)@pasha701
线程“main”中的异常org.apache.spark.sql.AnalysisException:无法解析给定输入列[col1];的“
col2”代码>使用例外情况测试,例如必须增加的列“col2”不存在,可以在增量代码之前创建:df.withColumn(“col2”,lit(0))
scala> import org.apache.spark.sql.expressions.Window
scala> val w = Window.partitionBy(lit(1)).orderBy(lit(1))
scala> val w1 = Window.partitionBy(lit(1)).orderBy("rn")
scala> df.withColumn("tmp", when($"col1" === true, 1).otherwise(0)).withColumn("rn", row_number.over(w)).withColumn("col2", sum("tmp").over(w1)).select("col1","col2").show
+-----+----+
| col1|col2|
+-----+----+
|false| 0|
|false| 0|
| true| 1|
|false| 1|
|false| 1|
| true| 2|
| true| 3|
|false| 3|
+-----+----+