РЕДАКТИРОВАНИЕ на основе отзывов в комментариях.
Следуя вашему шаблону, что-то вроде этого будет работать:
Dataset<Row> ds1 = spark.read().option("header", true).csv("mypath/01.csv");
Dataset<?>[] result = {ds1};
IntStream.range(2, 31)
.forEach(i -> {
Dataset<Row> next = spark.read().option("header", true).csv("mypath/"+i+".csv");
result[0] = result[0].join(next, "customer_id");
});
Мы упаковываем Dataset
вмассив, чтобы обойти ограничение на захват переменных в лямбда-выражениях.
Более простой способ для этого конкретного случая - просто использовать цикл for, а не stream.forEach
:
Dataset<Row> result = spark.read().option("header", true).csv("mypath/01.csv");
for( int i = 2 ; i < 31 ; i++ ) {
Dataset<Row> next = spark.read().option("header", true).csv("mypath/"+i+".csv");
result[0] = result[0].join(next, "customer_id");
};