Маклаппли и spark_read_parquet

Я относительно новичок в качестве активного пользователя форума, но сначала должен поблагодарить всех вас за ваш вклад, потому что я много лет искал ответы...

Сегодня у меня вопрос, который никто не решил или я не могу найти...

Я пытаюсь читать файлы параллельно с s3 (AWS) на искру (локальный компьютер) как часть тестовой системы. Я использовал mclapply, но при установке более 1 ядра он терпит неудачу...

Пример: (тот же код работает при использовании одного ядра, но не работает при использовании 2)

new_rdd_global ‹- mclapply(seq(file_paths), function(i){spark_read_parquet(sc, name=paste0("rdd_",i), path=file_paths[i])}, mc.cores = 1)

new_rdd_global ‹- mclapply(seq(file_paths), function(i){spark_read_parquet(sc, name=paste0("rdd_",i), path=file_paths[i])}, mc.cores = 2) Предупреждающее сообщение: в mclapply (seq(file_paths), function(i) { : все запланированные ядра обнаружили ошибки в пользовательском коде

Любое предложение???

Заранее спасибо.


person José Ángel Fernández Segovia    schedule 27.10.2017    source источник
comment
Не могли бы вы уточнить вопрос? Мне совершенно не очевидно, о чем вы спрашиваете. Вы также можете добавить краткое объяснение того, чего вы пытаетесь достичь.   -  person Oldřich Spáčil    schedule 27.10.2017
comment
Я пытаюсь распараллелить чтение из ведра s3a, в котором много файлов паркета хранится в разных каталогах. В данном случае file_paths — это переменная со списком полных имен путей и больше ничего... Концептуально это просто, но я не знаю, смогу ли я читать файлы параллельно или нет.   -  person José Ángel Fernández Segovia    schedule 27.10.2017


Ответы (1)


Просто прочитайте все в одну таблицу с помощью 1 вызова spark_read_parquet(), таким образом, Spark выполнит распараллеливание за вас. Если вам нужны отдельные таблицы, вы можете разделить их впоследствии, предполагая, что есть столбец, который сообщает вам, из какого файла были получены данные. Как правило, вам не нужно использовать mcapply() при использовании Spark с R.

person kevinykuo    schedule 28.10.2017
comment
Я пытался это сделать, но spark_read_parquet() выдает предупреждение при попытке передать более одного пути за раз: [a-zA-Z]+://, путь)) { : условие имеет длину › 1 и будет использоваться только первый элемент - person José Ángel Fernández Segovia; 30.10.2017
comment
Я мог бы прочитать несколько папок, указав их с помощью регулярных выражений, но кажется, что spark_read_parquet() не позволяет передать список путей. Является ли это возможным??? - person José Ángel Fernández Segovia; 30.10.2017
comment
Данные в ваших папках имеют точно такую ​​же структуру? Если это так, вы можете использовать подстановочные знаки, чтобы указать на нужные вам папки и прочитать все данные за один вызов. - person Oldřich Spáčil; 31.10.2017