Краткий вопрос :
Для более прямого запроса я хочу последовательно выполнить все строки и назначить некоторые значения некоторым переменным (a, b, c), основываясь на определенных условиях для конкретной строки, тогда я бы назначил значение 1 из этих переменных в столбец этой конкретной строки.
Подробное
Я хочу обновить значение столбца во фрейме данных в spark. Обновление будет условным, при этом я буду запускать цикл в строке и обновлять столбец на основе значений других столбцов этой строки.
Я пытался использовать подход Column, но получил ошибку. Пожалуйста, предложите любой другой подход. Разрешение подхода withColumn также очень поможет.
Таблица
var table1 = Seq((11, 25, 2, 0), (42, 20, 10, 0)).toDF("col_1", "col_2", "col_3", "col_4")
table1.show()
Схема
+-----+-----+-----+-----+
|col_1|col_2|col_3|col_4|
+-----+-----+-----+-----+
| 11| 25| 2| 0|
| 42| 20| 10| 0|
+-----+-----+-----+-----+
Я попробовал 2 подхода здесь:
- withColumn
- i ("col_4") = adj_c
В приведенном ниже коде переменные, инициализированные в разных местах, должны быть размещены только таким образом, согласно условиям
Код
for(i <- table1.rdd.collect()) {
if(i.getAs[Int]("col_1") > 0) {
var adj_a = 0
var adj_c = 0
if(i.getAs[Int]("col_1") > (i.getAs[Int]("col_2") + i.getAs[Int]("col_3"))) {
if(i.getAs[Int]("col_1") < i.getAs[Int]("col_2")) {
adj_a = 10
adj_c = 2
}
else {
adj_a = 5
}
}
else {
adj_c = 1
}
adj_c = adj_c + i.getAs[Int]("col_2")
table1.withColumn("col_4", adj_c)
//i("col_4") = adj_c
}
}
Ошибка в первом случае :
table1.withColumn ("col_4", adj_c)
<console>:80: error: type mismatch;
found : Int
required: org.apache.spark.sql.Column
table1.withColumn("col_4", adj_c)
^
Я также попытался использовать col (adj_c) здесь, но он начал работать с
<console>:80: error: type mismatch;
found : Int
required: String
table1.withColumn("col_4", col(adj_c))
^
Ошибка во втором случае :
(i ("col_4") = adj_c)
<console>:81: error: value update is not a member of org.apache.spark.sql.Row
i("col_4") = adj_c
^
Я хочу, чтобы выходная таблица была:
+-----+-----+-----+-----+
|col_1|col_2|col_3|col_4|
+-----+-----+-----+-----+
| 11| 25| 2| 1|
| 42| 20| 10| 5|
+-----+-----+-----+-----+
Пожалуйста, предложите возможные решения и в случае сомнений вернитесь к вопросу.
Пожалуйста, помогите мне с этим, потому что я застрял в проблеме. Любое предложение будет очень полезным.