我想通过传递cols列表以适应除ID以外的所有条件来适应以下情况。无论我做什么,cols,Row等都会出错。使用所有列并选择一个子集都可以,但是就功能而言,不是一个子集。
val df = sc.parallelize(Seq(
("r1", 1, 1),
("r2", 6, 4),
("r3", 4, 1),
("r4", 1, 2)
)).toDF("ID", "a", "b")
val ones = df.columns.drop(1).map(x => when(col(x) === 1, 1).otherwise(0)).reduce(_ + _)
df.withColumn("ones", ones).show
寻求指导。预先感谢。
答案 0 :(得分:1)
上面的代码对我有用。我不确定您要尝试的方法是否奏效。您是否只想在某些行中检查?在功能上?
def sumOnes(df: DataFrame, columnNames: Seq[String]): DataFrame = {
val ones = columnNames.map(x => when(col(x) === 1, 1).otherwise(0)).reduce(_ + _)
df.withColumn("ones", ones)
}
sumOnes(df, Seq("a")).show
+---+---+---+----+
| ID| a| b|ones|
+---+---+---+----+
| r1| 1| 1| 1|
| r2| 6| 4| 0|
| r3| 4| 1| 0|
| r4| 1| 2| 1|
+---+---+---+----+
sumOnes(df, Seq("b")).show
+---+---+---+----+
| ID| a| b|ones|
+---+---+---+----+
| r1| 1| 1| 1|
| r2| 6| 4| 0|
| r3| 4| 1| 1|
| r4| 1| 2| 0|
+---+---+---+----+
sumOnes(df, Seq("a", "b")).show
+---+---+---+----+
| ID| a| b|ones|
+---+---+---+----+
| r1| 1| 1| 2|
| r2| 6| 4| 0|
| r3| 4| 1| 1|
| r4| 1| 2| 1|
+---+---+---+----+