我需要访问我在 Kaggle [https://www.kaggle.com/] 中找到的 50 GB 数据集。问题是我的计算机内存和互联网连接非常糟糕,所以我认为最好将该数据集保存在带有一些 lambda 函数的 S3 存储桶中,而不先将其下载到我的计算机上。 Kaggle 有一个开放的 API,可以通过
pip install kaggle
访问然后 kaggle datasets download theRequieredDataset
来获取你的数据集,但我不知道如何在 lambda 函数中运行它。你们有人知道怎么做吗?这是一个好方法吗?你还有什么想法或建议吗?
启动 Amazon EC2 实例(
t3.nano
就可以)并安装该工具集可能是最简单的。
然后,将数据下载到 EC2 实例并上传到 Amazon S3 存储桶。
您应该为具有访问 S3 存储桶权限的实例分配一个 IAM 角色。
EC2 似乎最直接,如果你想去无服务器,你需要创建一个特定的层才能使用 kaggle 包,我没有试过这个,但它应该工作,见:
https://docs.aws.amazon.com/lambda/latest/dg/invocation-layers.html
https://repost.aws/knowledge-center/lambda-import-module-error-python
https://docs.aws.amazon.com/lambda/latest/dg/configuration-envvars.html
代码示例:
# KAGGLE_USERNAME="set these and env vars
# KAGGLE_KEY="set these as env vars"
# imports
import boto3
from kaggle.api.kaggle_api_extended import KaggleApi
def lambda_handler(event, context):
# auth
api = KaggleApi()
api.authenticate()
# Download the file from Kaggle
api.dataset_download_file(dataset='uciml/iris', file_name='Iris.csv', path='/tmp')
# Upload the file to S3
s3 = boto3.client('s3')
bucket_name = 'your-s3-bucket-name'
file_name = 'Iris.csv'
object_key = 'kaggle-data/' + file_name
s3.upload_file('/tmp/' + file_name, bucket_name, object_key)
print(f'Successfully downloaded and uploaded {file_name} to {bucket_name}/{object_key}')