相关疑难解决方法(0)

AWS boto和boto3之间有什么区别

我是使用Python的AWS新手,我正在尝试学习boto API但是我注意到Python有两个主要的版本/包.那将是boto和boto3.

AWS boto和boto3库有什么区别?

python boto amazon-web-services boto3

121
推荐指数
1
解决办法
3万
查看次数

为什么没有准备好Amazon S3身份验证处理程序?

我正确设置了$ AWS_ACCESS_KEY_ID和$ AWS_SECRET_ACCESS_KEY环境变量,并运行此代码:

import boto
conn = boto.connect_s3()
Run Code Online (Sandbox Code Playgroud)

并得到此错误:

boto.exception.NoAuthHandlerFound: No handler was ready to authenticate. 1 handlers were checked. ['HmacAuthV1Handler']
Run Code Online (Sandbox Code Playgroud)

发生了什么?我不知道从哪里开始调试.


似乎boto没有从我的环境变量中获取值.如果我将密钥id和密钥作为参数传递给连接构造函数,这可以正常工作.

amazon-s3 boto amazon-web-services

44
推荐指数
4
解决办法
4万
查看次数

读取/写入 Parquet 文件而不读入内存(使用 Python)


我查看了我期望能够满足我的需求的标准文档(Apache ArrowPandas),但我似乎无法弄清楚。

我最了解Python,所以我想使用Python,但这不是严格要求。

问题

我需要将 Parquet 文件从一个位置(URL)移动到另一个位置(Azure 存储帐户,在本例中使用 Azure 机器学习平台,但这与我的问题无关)。

这些文件太大而无法简单地执行pd.read_parquet("https://my-file-location.parquet"),因为这会将整个文件读取到一个对象中。

期待

我认为必须有一种简单的方法来创建文件对象并逐行流式传输该对象 - 或者可能逐列块。就像是

import pyarrow.parquet as pq

with pq.open("https://my-file-location.parquet") as read_file_handle:
    with pq.open("https://my-azure-storage-account/my-file.parquet", "write") as write_filehandle:
        for next_line in read_file_handle{
            write_file_handle.append(next_line)
Run Code Online (Sandbox Code Playgroud)

我知道它会有点不同,因为 Parquet 主要是为了以柱状方式访问。也许我会传递某种配置对象,它指定感兴趣的列,或者可以在一个块或类似的东西中抓取多少行。

但主要的期望是有一种方法可以访问 parquet 文件,而无需将其全部加载到内存中。我怎样才能做到这一点?

FWIW,我确实尝试过只使用 Python 的标准open函数,但我不确定如何使用openURL 位置和字节流。如果可以通过跳过open任何 Parquet 特定的内容来完成此操作,那也很好。

更新

一些评论建议使用类似 bash 的脚本,例如这里。如果没有别的办法我可以使用这个,但它并不理想,因为:

  • 我宁愿将这一切保留在完整的语言 SDK 中,无论是 Python、Go 还是其他语言。如果解决方案转移到带有管道的 bash 脚本中,则需要外部调用,因为最终解决方案不会完全由 bash、Powershell 或任何脚本语言编写。
  • 我真的很想利用 Parquet 本身的一些优势。正如我在下面的评论中提到的,Parquet 是列式存储。因此,如果我有一个包含 …

python io parquet

7
推荐指数
2
解决办法
1万
查看次数

如何将 InMemoryUploadedFile 上传到我的 S3 Bucket?

我有一个简单的上传表单,其中包含一个图像FileField

def post(request):    
    if request.user.is_authenticated():
        form_post = PostForm(request.POST or None, request.FILES or None)
        if form_post.is_valid():
            instance = form_post.save(commit=False)
            instance.user = request.user

            instance.save()

            return HttpResponseRedirect('/home/')
        else:
            form_post = PostForm()

        context = {
            'form_post': form_post,
        }
        return render(request, 'post/post.html', context)
    else:
        return HttpResponseRedirect("/accounts/signup/")
Run Code Online (Sandbox Code Playgroud)

当用户向表单添加图像时,它会触发以下 JS 函数:

$('input#id_image').on('change', function(e) {...} 
Run Code Online (Sandbox Code Playgroud)

这给出了图像的预览。这是我希望将图像上传到我的媒体文件夹目录的地方(我使用的是 S3 存储)。默认情况下,当用户提交表单时上传图像,但我希望它在$('input#id_image').on('change'触发后立即上传。

到目前为止,我所做的是InMemoryUploadedFile在我的视图中以格式检索图像:

$('input#id_image').on('change', function(e) {
var formData = new FormData();

formData.append('image', $('input[type=file]')[0].files[0]);
formData.append('csrfmiddlewaretoken', $("input[name='csrfmiddlewaretoken']").val());

$.ajax({
    url: '/upload_image/',
    data: formData,
    type: 'POST',
    contentType: false,
    processData: false, …
Run Code Online (Sandbox Code Playgroud)

javascript python django jquery amazon-s3

3
推荐指数
1
解决办法
1998
查看次数

使用 Python 将文件上传到 S3

我有一个文件 URL 列表,它们是下载链接。我已经编写了 Python 代码来将文件下载到我的计算机上。问题来了,列表中有大约 500 个文件,Chrome 在下载了大约 50 个文件后变得没有响应。我最初的目标是将我下载的所有文件上传到 s3 中的 Bucket。有没有办法让文件直接转到S3?这是我到目前为止所写的内容:

import requests
from itertools import chain
import webbrowser

url = "<my_url>"
username = "<my_username>"
password = "<my_password>"
headers = {"Content-Type":"application/xml","Accept":"*/*"}

response = requests.get(url, auth=(username, password), headers = headers)
if response.status_code != 200:
    print('Status:', response.status_code, 'Headers:', response.headers, 'Error Response:', response.json())
    exit()

data = response.json()
values = list(chain.from_iterable(data.values()))
links = [lis['download_link'] for lis in values]
for item in links:
    webbrowser.open(item)
Run Code Online (Sandbox Code Playgroud)

python xml url file amazon-s3

2
推荐指数
1
解决办法
1万
查看次数

在 aws boto3 上传中获取进度回调

这里有一个关于原始 boto 上传的很好的问题和答案:

如何使用 boto 将文件上传到 S3 存储桶中的目录

其中有一个回调:

k = Key(bucket)
k.key = 'my test file'
k.set_contents_from_filename(testfile,
    cb=percent_cb, num_cb=10)
Run Code Online (Sandbox Code Playgroud)

虽然我看到 boto3 包需要回调:

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#S3.Client.upload_fileobj

我没有看到与 num_cb 参数等效的内容。如何获得upload_fileobj使用 boto3 的进度表?

s3.upload_fileobj(data, 'mybucket', 'mykey')
Run Code Online (Sandbox Code Playgroud)

amazon-web-services python-3.x boto3

1
推荐指数
1
解决办法
5457
查看次数