簡體   English   中英

讀取 PySpark 中的多個文本文件

[英]Read Multiple Text Files in PySpark

我有很多文本文件存儲在 S3 中,幾乎分區,但不完全。 我想閱讀並結合所有這些。 鍵的前綴如下:

s3_keys = ['s3a://prd-bucket//PROD/data/2021-04-16/part-2144.log',
 's3a://prd-bucket//PROD/data/2021-04-16/part-2146.log',
 's3a://prd-bucket//PROD/data/2021-04-16/part-2148.log',
 's3a://prd-bucket//PROD/data/2021-04-16/part-2150.log',
 's3a://prd-bucket//PROD/data/2021-04-16/part-2164.log',
 's3a://prd-bucket//PROD/data/2021-04-16/part-requeue-client-xxx.log'
]

我嘗試按照這個答案進行操作,但由於某些奇怪的原因, spark.read.text破壞了第一個路徑之后每個路徑中預先添加的文件系統:

df = (
    spark.read.option('mode', 'FAILFAST')
    .text(','.join(s3_keys))
)

Py4JJavaError:調用 o40880.text 時出錯。 :org.apache.spark.sql.AnalysisException:路徑不存在:s3a://prd-bucket/PROD/data/2021-04-16/part-2144.log,s3a:/prd-bucket/PROD/data /2021-04-16/part-2146.log...

請注意s3a:/而不是s3a:// 為什么會這樣? 我也很好奇這種路徑修改是否有限制......類似於 AmazonS3Exception: Request-URI Too Large

類似的問題問在這里,但我需要一個解決方案 PySpark (2.4) 在 S3 上。

您正在傳遞由 分隔的多個路徑,作為一個字符串,這就是您遇到錯誤的原因。

Py4JJavaError: An error occurred while calling o40880.text. : org.apache.spark.sql.AnalysisException: Path does not exist: s3a://prd-bucket/PROD/data/2021-04-16/part-2144.log,s3a:/prd-bucket/PROD/data/2021-04-16/part-2146.log ...

將多個路徑作為可變參數或列表傳遞。 試試下面的代碼。

df = (
    spark.read.option('mode', 'FAILFAST')
    .text(s3_keys)
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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