簡體   English   中英

使用 spark 寫入文件並使用 python 讀取

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM