amazon-s3 - 如何在 EMR Notebook 上使用 pyspark 从 tar.bz2 读取镶木地板文件?
问题描述
我正在尝试从 S3 存储桶中读取 tar.bz2 格式的镶木地板(活泼)文件,但收到此错误:“java.io.IOException:无法读取文件的页脚”
使用时:
df = spark.read.parquet("s3://bucket/folder/filename.tar.bz2")
我已经下载了一个 tar.bz2 文件,并验证它在底层 tar 目录中是有效的镶木地板。
我还研究了在 boto3 包中使用 S3 Select,但看起来 BZIP 目前仅支持 CSV 和 JSON 文件,而不是镶木地板。我还尝试将文件解压缩回 S3,如下所示:
sc.install_pypi_package("boto3")
import boto3
from io import BytesIO
import tarfile
s3 = boto3.client('s3')
obj = s3.get_object(Bucket=bucket,Key='folder/filename.tar.bz2')
wholefile = obj['Body'].read()
fileobj = BytesIO(wholefile)
tar = tarfile.open(fileobj=fileobj)
s3.upload_fileobj(Fileobj=tar, Bucket=bucket, Key='folder/filename.parquet')
但是,这只会产生“解释器死亡:”错误消息而没有任何其他信息(可能是由于集群中的内存不足?)。我是否缺少解压缩 tar 库的步骤?
解决方案
推荐阅读
- swift - 如何将视图(不是 UIView)转换为图像?
- python - Matplotlib 绘图悬停 xlwings 导出到 excel
- php - 在 PHP 中不显示登录错误的验证消息
- java - 执行长时间运行的命令后,Jsch“exec”通道不会自动关闭
- java - 如何修复此输出
- c# - asp.net 应用程序中导出功能中的 CSV 注入
- python - 以人类可读格式转换纪元时间
- node.js - 两个不同的 Node.js 服务器如何与一个猫鼬模式通信?
- c - 将整个 unsigned char 数组返回给 main
- amazon-web-services - 如何向 Lambda 函数授予 Athena 查询权限?