Я хочу создать групповые метки на основе условия, проверенного в другом столбце.В частности, если есть значение directionChange.equalTo(1)
, я хочу начать новый сегмент (метку).Результат должен быть указан в столбце segmentNr
результат, полученный моим кодом, находится в nSegment
.Я предполагаю, что это невозможно для подобных заданий.Наконец, я хотел бы рассчитать различные аспекты, такие как сумма, среднее, максимальное значение на сегмент (не входит в объем вопроса).
Пример ввода:
+---+-----+---------------+---------+--------+
| id|value|directionChange|segmentNr|nSegment|
+---+-----+---------------+---------+--------+
| 1| 11.0| 0| 1| 1|
| 2|-22.0| 1| 2| 1|
| 3| 34.0| 0| 2| 1|
| 4|-47.0| 1| 3| 1|
| 5| 61.0| 1| 4| 1|
| 6| 22.0| 0| 4| 1|
| 7| 5.0| 0| 4| 1|
| 8| -7.0| 1| 5| 1|
+---+-----+---------------+---------+--------+
Функция добавления нового столбца с использованием входного набора данных:
public static Dataset<Row> createSegments(Dataset<Row> dataset, String columnName, int start, String newColumnName) throws Exception
{
int test = 1;
Dataset<Row> resultDataset = dataset.withColumn(newColumnName, //
functions.when(dataset.col(columnName).equalTo(1), (start = start + 1))//
.otherwise(start));
return resultDataset;
}
Функция вызывается следующим образом:
dataset = createSegments(dataset, "directionChange", 0, "nSegment");