pyspark Загрузка нескольких разделенных файлов за одну загрузку

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

КОД Ниже воссоздайте проблему:

basepath = '/file/' 
paths = ['/file/df201601.orc', '/file/df201602.orc', '/file/df201603.orc',  
         '/file/df201604.orc', '/file/df201605.orc', '/file/df201606.orc',  
         '/file/df201604.orc', '/file/df201605.orc', '/file/df201606.orc',  
         '/file/df201604.orc', '/file/df201605.orc', '/file/df201606.orc',  
         '/file/df201604.orc', '/file/df201605.orc', '/file/df201606.orc',  
         '/file/df201604.orc', '/file/df201605.orc', '/file/df201606.orc',  
         '/file/df201604.orc', '/file/df201605.orc', '/file/df201606.orc',  
         '/file/df201604.orc', '/file/df201605.orc', '/file/df201606.orc', ]   

df = sqlContext.read.format('orc') \
               options(header='true',inferschema='true',basePath=basePath)\
               .load(*paths)

ОШИБКА ПОЛУЧЕНА:

 TypeError                                 Traceback (most recent call last)
 <ipython-input-43-7fb8fade5e19> in <module>()

---> 37 df = sqlContext.read.format('orc')                .options(header='true', inferschema='true',basePath=basePath)                .load(*paths)
     38 

TypeError: load() takes at most 4 arguments (24 given)

1 ответ

Как объясняется в официальной документации, чтобы прочитать несколько файлов, вы должны передать list:

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

Итак, в вашем случае:

(sqlContext.read
    .format('orc') 
    .options(basePath=basePath)
    .load(path=paths))

Аргумент распаковывается (*) имеет смысл только если load был определен с помощью переменных аргументов, пример формы:

def load(this, *paths):
    ...
Другие вопросы по тегам