[英]Writing files using spark and reading using python
使用 spark 寫入文件 s3 通常會創建一個包含 11 個文件成功的目錄,而另一個文件名以名稱開頭,其中包含 s3 中的實際數據,如何使用 pandas dataframe 加載相同的文件,因為文件路徑會因為文件名 Par 而更改對於所有 10 個具有實際數據的文件,每次運行都會有所不同。
例如撰寫本文時的文件路徑:
df.colaesce.(10).write.path("s3://testfolder.csv")
存放在目錄中的文件有:
- sucess
- part-00-*.parquet
我有一個 python 作業,它將文件讀取到 pandas dataframe
pd.read(s3\\..........what is the path to specify here.................)
使用 spark 編寫文件時,您不能傳遞文件的名稱(可以,但最終會得到上述內容)。 如果您希望稍后將單個文件加載到 pandas,您可以執行以下操作:
df.repartition(1).write.parquet(path="s3://testfolder/", mode='append')
最終結果將是“s3://testfolder/”中以part-00-*.parquet開頭的單個文件。 在使用 pandas 讀入之前,您可以簡單地讀入該文件或將文件重命名為特定內容。
選項 1:(推薦)
您可以使用awsrangler 。 它是一種輕量級工具,可幫助 Pandas/S3/Parquet 之間的集成。 它允許您從目錄中讀取多個文件。
pip install awswrangler
import awswrangler as wr
df = wr.s3.read_parquet(path='s3://testfolder/')
選項 2:
############################## RETRIEVE KEYS FROM THE BUCKET ##################################
import boto3
import pandas as pd
s3 = boto3.client('s3')
s3_bucket_name = 'your bucket name'
prefix = 'path where the files are located'
response = s3.list_objects_v2(
Bucket = s3_bucket_name,
Prefix = prefix
)
keys = []
for obj in response['Contents']:
keys.append(obj['Key'])
##################################### READ IN THE FILES #######################################
df=[]
for key in keys:
df.append(pd.read_parquet(path = 's3://' + s3_bucket_name + '/' + key, engine = 'pyarrow'))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.