#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 спасибо, это решает мою проблему. Мне было бы любопытно выяснить, почему мой пользовательский слой не работает, но я посмотрю на это позже.