Проблема с лямбда-слоем Pandas Read_csv()

#python #amazon-web-services #aws-lambda

Вопрос:

В настоящее время я пытаюсь создать лямбда-слой, чтобы я мог импортировать csv-файлы в виде фреймов данных pandas в лямбда-функции. Я попытался использовать слой, управляемый AWS (слой AWSDataWrangler), но это тоже не работает.

Я создал файл «python», содержащий:

введите описание изображения здесь

Затем я архивирую этот файл и загружаю его в виде лямбда-слоя. Я получаю эту ошибку при попытке pd.read_csv() из моего хранилища s3:

   "errorMessage": "Install s3fs to access S3",
  "errorType": "ImportError",
  "stackTrace": [
    "  File "/var/task/ManifestValidationLambda/manifest_validation.py", line 19, in handlern    df = pd.read_csv('s3://'   s3_bucket_name  '/'   s3_key, header = 0)n",
    "  File "/opt/python/pandas/util/_decorators.py", line 311, in wrappern    return func(*args, **kwargs)n",
    "  File "/opt/python/pandas/io/parsers/readers.py", line 586, in read_csvn    return _read(filepath_or_buffer, kwds)n",
    "  File "/opt/python/pandas/io/parsers/readers.py", line 482, in _readn    parser = TextFileReader(filepath_or_buffer, **kwds)n",
    "  File "/opt/python/pandas/io/parsers/readers.py", line 811, in __init__n    self._engine = self._make_engine(self.engine)n",
    "  File "/opt/python/pandas/io/parsers/readers.py", line 1040, in _make_enginen    return mapping[engine](self.f, **self.options)  # type: ignore[call-arg]n",
    "  File "/opt/python/pandas/io/parsers/c_parser_wrapper.py", line 51, in __init__n    self._open_handles(src, kwds)n",
    "  File "/opt/python/pandas/io/parsers/base_parser.py", line 222, in _open_handlesn    self.handles = get_handle(n",
    "  File "/opt/python/pandas/io/common.py", line 609, in get_handlen    ioargs = _get_filepath_or_buffer(n",
    "  File "/opt/python/pandas/io/common.py", line 358, in _get_filepath_or_buffern    file_obj = fsspec.open(n",
    "  File "/opt/python/fsspec/core.py", line 452, in openn    return open_files(n",
    "  File "/opt/python/fsspec/core.py", line 286, in open_filesn    fs, fs_token, paths = get_fs_token_paths(n",
    "  File "/opt/python/fsspec/core.py", line 622, in get_fs_token_pathsn    cls = get_filesystem_class(protocol)n",
    "  File "/opt/python/fsspec/registry.py", line 221, in get_filesystem_classn    raise ImportError(bit["err"]) from en"
  ]
}
 

Вот мой код на python:

 s3_bucket_name = 'bucketname'
    s3_key = 'csv file name'

    s3_client = boto3.client('s3')

    # obj = s3_client.get_object(Bucket=s3_bucket_name, Key=s3_key)
    # #print(obj['Body'])

    df = pd.read_csv('s3://'   s3_bucket_name  '/'   s3_key, header = 0)
    print(df.head(2))
 

Вы можете видеть, что у меня есть пакет s3fs в почтовом каталоге. Как я должен решить эту проблему?

Комментарии:

1. Я сделал это с помощью уровня AWS Data Wrangler без проблем. Я не думаю, что вы можете читать непосредственно из S3, как вы пытаетесь, без библиотеки Data Wrangler. Я предлагаю вернуться к слою Data Wrangler, чтобы вы, по крайней мере, знали, что слой построен правильно, а затем опубликовать свой код Data Wrangler и ошибки, если у вас все еще возникнут проблемы.

2. Обратите внимание, что это будет wranger.s3.read_csv() с доступным уровнем обработки данных. Вы не вызываете pandas.read_csv() напрямую.

3. @MarkB понял. как насчет методов преобразования фреймов данных от панд? существуют ли они в слое врангера?

4. Да, уровень wrangler включает в себя панд и все зависимости от панд.

5. @MarkB спасибо, это решает мою проблему. Мне было бы любопытно выяснить, почему мой пользовательский слой не работает, но я посмотрю на это позже.