#java #apache-spark #java-8 #apache-spark-dataset
#java #apache-spark #java-8 #apache-spark-dataset
Вопрос:
Новичок в Java и Spark здесь ищет помощь:
Есть ли способ создать набор данных с одним столбцом, содержащим возрастающие значения от 1 до n?
Dataset<Row> ds = ss.createDataSet("column-name", 1, 1000);
Выше приведено довольно грубо, поскольку такого метода не существует, createDataSet
но я ищу что-то в этом роде, что может лениво создавать содержимое ds
.
Ответ №1:
Предполагая, что вы используете java 8
int n = 1000;
List<Integer> intList = IntStream.range(1, n 1).boxed().collect(Collectors.toList());
Encoder<Integer> integerEncoder = Encoders.INT();
Dataset<Integer> primitiveDS = spark.createDataset(intList, integerEncoder);
Также имейте в виду, что когда вы пытаетесь создать набор данных в spark, вам нужно будет создать / передать самогенерируемый список данных, который полностью генерируется driver
.
Комментарии:
1. Если я правильно понимаю, ваше решение будет создано
intList
с его содержимым в памяти и лениво созданоDataset<Integer>
позже. Я ищу решение, которое не материализует в памятиintList
список, а вместо этого создаетDataset
напрямую.2. Это принципиально невозможно в spark. Потому что вы просите исполнителей создать свой собственный набор возрастающих целых чисел.
3. Spark нужна ссылка на полные данные. Пример: в случае файла у него есть ссылка и
LOADS LAZILY
. Но в вашем случае нет ссылки на данные. Вам нужно его сгенерировать. Не существует понятияlazy generation