我的路徑格式為s3://my_bucket/timestamp=yyyy-mm-dd HH:MM:SS/.
例如s3://my-bucket/timestamp=2021-12-12 12:19:27/,但是 MM:SS 部分是不可預測的,我有興趣閱讀給定小時的資料。我嘗試了以下方法:
df = spark.read.parquet("s3://my-bucket/timestamp=2021-12-12 12:*:*/")df = spark.read.parquet("s3://my-bucket/timestamp=2021-12-12 12:[00,01-59]:[00,01-59]/")
但他們給出了錯誤pyspark.sql.utils.IllegalArgumentException: java.net.URISyntaxException。
uj5u.com熱心網友回復:
問題是您的路徑包含冒號:。不幸的是,它仍然不受支持。以下是一些相關的門票:
- https://issues.apache.org/jira/browse/SPARK-20061
- https://issues.apache.org/jira/browse/HADOOP-14217
和執行緒:
- 檔案名中的冒號“:”苦苦掙扎
我認為唯一的方法是重命名這些檔案......
uj5u.com熱心網友回復:
如果你想要性能......
我謙虛地建議,當您重新架構時,不要使用 S3 檔案串列/目錄串列來完成此操作。我建議您使用按小時磁區的 Hive 表。(或者你寫一個作業來幫助將資料遷移到大檔案而不是小檔案中的幾個小時。)
S3 是用于長期廉價存盤的出色引擎。它的性能不高,而且由于它們的實作方式,它在目錄串列方面特別糟糕。(如果目錄中有多個小檔案,性能只會變得更差)。
要從您的作業中獲得一些真正的性能,您應該使用配置單元表(已磁區,因此檔案查找在 DynamoDB 中完成,并且磁區是小時級別的。)或其他一些減少所需檔案計數/目錄串列的修飾檔案結構。
如果您可以在不使用檔案串列的情況下將資料重組為更大的檔案,您將看到性能大幅提升。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/405145.html
標籤:
