首页 > 解决方案 > 如何在 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 库的步骤?

标签: amazon-s3pysparkamazon-emr

解决方案


推荐阅读