【发布时间】:2021-12-28 18:17:03
【问题描述】:
我在 s3 存储桶 (s3://mybucket/my/path/) 中几乎没有镶木地板文件。我想使用 boto3 将其读入 spark 数据帧。
由于现有的安全性,我无法将其直接读取为 spark.read.parquet('s3://mybucket/my/path/') 。所以,需要使用 boto3 来阅读。
在尝试使用以下代码读取单个镶木地板文件 (s3://mybucket/my/path/myfile1.parquet) 时,出现错误。
res = autorefresh_session.resource('s3')
bucket = res.Bucket(name=mybucket)
obj = bucket.objects.filter(prefix=/my/path)
body = io.BytesIO(obj.get()['Body'].read())
spark.read.parquet(body).show()
Py4JJavaError:调用 xyz.parquet 时出错。 : java.lang.ClassCastException: java.util.ArrayList 不能转换为 java.lang.String 在 org.apache.spark.sql.DataFrameReader.preprocessDeltaLoading(DataFrameReader.scala:282)
谁能告诉我如何使用 boto3 读取单个文件并完成文件夹?
我可以使用上述方法成功读取 csv 文件,但不能读取 parquet 文件。 我可以将单个文件读入 pandas df 然后 spark,但这不是一种有效的读取方式。
【问题讨论】: