2015-11-21 3 views
3

Я пытаюсь загрузить каталог паркетных файлов в искре, но не могу показаться, чтобы заставить его работать ... это похоже на работу:Как использовать sqlContext для загрузки нескольких паркетных файлов?

val df = sqlContext.load("hdfs://nameservice1/data/rtl/events/stream/loaddate=20151102") 

, но это не работает:

val df = sqlContext.load("hdfs://nameservice1/data/rtl/events/stream/loaddate=201511*") 

он возвращает мне эту ошибку:

java.io.FileNotFoundException: File does not exist: hdfs://nameservice1/data/rtl/events/stream/loaddate=201511* 

как я заставить его работать с дикой картой?

+0

Вы можете использовать одно из решений в http://stackoverflow.com/questions/794381/how-to-find-files-that-match-a-wildcard-string- in-java, чтобы превратить шаблон в список имен файлов, существующих в вашей системе. –

+2

Какая версия Spark? Это должно быть исправлено .. –

ответ

7

вы можете прочитать в списке файлов или папок, используя статус списка файловой системы. Затем перейдите по файлам/папкам, которые вы хотите прочитать. Используйте сокращение с помощью объединения, чтобы уменьшить все файлы в один отдельный rdd.

Получить файлы/папки:

val fs = FileSystem.get(new Configuration()) 
val status = fs.listStatus(new Path(YOUR_HDFS_PATH)) 

прочитанной в данных:

val parquetFiles= status .map(folder => { 
    sqlContext.read.parquet(folder.getPath.toString) 
    }) 

Объединение данных в единую РДУ:

val mergedFile= parquetFiles.reduce((x, y) => x.unionAll(y)) 

Вы также можете посмотреть на мои прошлые должности по той же теме.

Spark Scala list folders in directory

Spark/Scala flatten and flatMap is not working on DataFrame

0

Если предлагаемые пути являются разделительными каталогами, пожалуйста, установите «BasePath» в настройках источника данных, чтобы указать корневой каталог таблицы. Если имеется несколько корневых каталогов, загрузите их отдельно, а затем соедините их.

нравится:

basePath="hdfs://nameservice1/data/rtl/events/stream" 

sparkSession.read.option("basePath", basePath).parquet(basePath + "loaddate=201511*") 
Смежные вопросы