Учитывая DataFrame:
+------------+---------+
|variableName|dataValue|
+------------+---------+
| IDKey| I1|
| b| y|
| a| x|
| IDKey| I2|
| a| z|
| b| w|
| c| q|
+------------+---------+
Я хочу создать новый столбец с соответствующими значениями IDKey, где каждое значение изменяется при каждом изменении значения dataValue для IDKey, вот ожидаемый результат:
+------------+---------+----------+
|variableName|dataValue|idkeyValue|
+------------+---------+----------+
| IDKey| I1| I1|
| b| y| I1|
| a| x| I1|
| IDKey| I2| I2|
| a| z| I2|
| b| w| I2|
| c| q| I2|
+------------+---------+----------+
Я попытался сделать следующий код, который использует mapPartitions()
и глобальную переменную
var currentVarValue = ""
frame
.mapPartitions{ partition =>
partition.map { row =>
val (varName, dataValue) = (row.getString(0), row.getString(1))
val idKeyValue = if (currentVarValue != dataValue && varName == "IDKey") {
currentVarValue = dataValue
dataValue
} else {
currentVarValue
}
ExtendedData(varName, dataValue, currentVarValue)
}
}
Но это не сработает из-за двух фундаментальных вещей: Spark не обрабатывает глобальные переменные а также, это не соответствует функциональному стилю программирования
Я буду рад любой помощи по этому вопросу Спасибо!