Чтобы упростить входные параметры и код, я сгенерировал список ввода (в реальном времени это много csv
файлов с цифрами внутри). Все входные числа должны быть сгруппированы по единому правилу регулярности. Числа, которые нельзя описать ни одним правилом регулярности, должны быть удалены из результата вывода.
пример ввода:
[1010,1020,1050,1030,1022,1880,1940,1900,1920,2010,3100]
пример вывода результата:
[[1010,1020,1030,1050],[1880,1900,1920,1940]]
[1010,1020,1030,1050]
имеет шаг приращения 10
, а последовательность имеет исключение (1040
). [1880,1900,1920,1940]
имеет шаг приращения 20
, последовательность без исключений.
Исходное решение с spark
на java
public static void main(String[] args) throws Exception {
Logger.getLogger("org").setLevel(Level.OFF);
SparkConf conf = new SparkConf().setAppName("reduce").setMaster("local[*]");
JavaSparkContext sc = new JavaSparkContext(conf);
List<Integer> inputIntegers = Arrays.asList(1010,1020,1050,1030,1022,1880,1940,1900,1920,2010,3100);
JavaRDD<Integer> integerRdd = sc.parallelize(inputIntegers);
System.out.println("Check count of objects: " + integerRdd.count());
System.out.println(integerRdd.collect());
JavaRDD<Integer> sorted = integerRdd.sortBy(x -> x, true, 1);
System.out.println("Check sorted collection:");
System.out.println(sorted.collect());
/* TODO
- enrich data with increment step
- group by increment step (increment step should be calculated in run time)
- filter out single values
*/
}
Я думаю, что мне нужно использовать шаг приращения, но я не знаю, как управлять данными из разных RDD (в случае использования spark
), чтобы иметь возможность сохранить шаг приращения в текущей искре RDD
У кого-нибудь есть идеи, как решить мою проблему с искрой или как ее можно решить с помощью различных инструментов?
приписка
Spark (или любая эквивалентная технология) обязательна, поскольку решение должно быть ориентировано на большие данные и в результате разрешаться в распределенной системе.