无需先在我的电脑上下载,将 Kaggle 数据集上传到 AWS S3

问题描述 投票:0回答:2

我需要访问我在 Kaggle [https://www.kaggle.com/] 中找到的 50 GB 数据集。问题是我的计算机内存和互联网连接非常糟糕,所以我认为最好将该数据集保存在带有一些 lambda 函数的 S3 存储桶中,而不先将其下载到我的计算机上。 Kaggle 有一个开放的 API,可以通过

pip install kaggle
访问然后
kaggle datasets download theRequieredDataset
来获取你的数据集,但我不知道如何在 lambda 函数中运行它。你们有人知道怎么做吗?这是一个好方法吗?你还有什么想法或建议吗?

python amazon-web-services amazon-s3 aws-lambda kaggle
2个回答
2
投票

启动 Amazon EC2 实例(

t3.nano
就可以)并安装该工具集可能是最简单的。

然后,将数据下载到 EC2 实例并上传到 Amazon S3 存储桶。

您应该为具有访问 S3 存储桶权限的实例分配一个 IAM 角色。


0
投票

EC2 似乎最直接,如果你想去无服务器,你需要创建一个特定的层才能使用 kaggle 包,我没有试过这个,但它应该工作,见:

  • 创建一个 lambda 层以允许安装 kaggle 包:

https://docs.aws.amazon.com/lambda/latest/dg/invocation-layers.html

https://repost.aws/knowledge-center/lambda-import-module-error-python

  • aws lambda 环境变量

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}')
© www.soinside.com 2019 - 2024. All rights reserved.