Я знаю, что Spark намного лучше работает с денормализованными таблицами, где все необходимые данные находятся в одной строке.Интересно, если бы это было не так, у него был бы способ извлечь данные из предыдущих или следующих строк.
Пример:
Формула: значение = (значение 2 года назад) + (значение текущего года) / (значение на 2 года вперед)
Table
+-------+-----+
| YEAR|VALUE|
+-------+-----+
| 2015| 100 |
| 2016| 34 |
| 2017| 32 |
| 2018| 22 |
| 2019| 14 |
| 2020| 42 |
| 2021| 88 |
+-------+-----+
Dataset<Row> dataset ...
Dataset<Results> results = dataset.map(row -> {
int currentValue = Integer.valueOf(row.getAs("VALUE")); // 2019
// non sense code just to exemplify
int twoYearsBackValue = Integer.valueOf(row[???].getAs("VALUE")); // 2016
int twoYearsAheadValue = Integer.valueOf(row[???].getAs("VALUE")); // 2021
double resultValue = twoYearsBackValue + currentValue / twoYearsAheadValue;
return new Result(2019, resultValue);
});
Results[] results = results.collect();
Можно ли получить эти значения (принадлежащие другим строкам) без изменения формата таблицы (без денормализации, без сводок...) а также без сбора данных, или это полностью противоречит принципам Spark / BigData?