取消
顯示的結果
而不是尋找
你的意思是:

過濾器僅三角洲表從一個S3文件夾列表

Ovi
新的貢獻者三世

大家好,

從s3的文件夾列表,我怎麼能過濾哪些三角洲表,沒有想讀每一次嗎?

謝謝,

Ovi

1接受解決方案

接受的解決方案

NandiniN
重視貢獻二世
重視貢獻二世

這是一個優雅,它使用isDeltaTable()從DeltaTableUtils和dbutils。

進口org.apache.spark.sql.delta.DeltaTableUtils val s3Path = " s3: / /桶/文件夾”/ /得到所有文件夾的列表在s3路徑val文件夾= dbutils.fs.ls (s3Path) . map (_.path) / /過濾掉任何val nonDeltaFolders =δ表文件夾的文件夾。過濾器(path = > ! DeltaTableUtils.isDeltaTable(路徑))/ /打印的結果列表文件夾nonDeltaFolders.foreach println ()

注意:這個也可以在python(包DeltaTableUtils DeltaTable)

感謝和問候,

Nandini

在原帖子查看解決方案

5回複5

NandiniN
重視貢獻二世
重視貢獻二世

你好@Ovidiu Eremia,

過濾在S3文件夾包含三角洲表,您可以尋找特定的文件與三角洲相關聯表。三角洲湖將其元數據存儲在一個隱藏的文件夾命名

_delta_log,位於三角洲的根表。所以,你可以檢查這個文件夾。

在以下代碼中,我們首先得到S3 bucket和對象在指定的前綴。然後我們隻過濾掉那些對象代表三角洲表通過檢查,如果他們與_delta_log /鍵結束。最後,我們從三角洲中提取文件夾名字對象路徑和打印的文件夾列表包含三角洲表。

進口boto3 s3 = boto3.resource (s3) bucket_name = =“your-bucket-name”前綴的路徑/ /文件夾# s3 bucket和對象在指定的前綴桶= s3.Bucket (bucket_name)對象= bucket.objects.filter(前綴=前綴)#隻過濾對象代表三角洲表delta_objects = (obj。關鍵在對象obj如果obj.key.endswith (_delta_log /)] #提取文件夾名稱從三角洲對象路徑delta_folders = [obj.split (“_delta_log /”) [0] obj delta_objects)打印(delta_folders)

引用:https://boto3.amazonaws.com/v1/documentation/api/latest/guide/collections.html

希望這個有幫助。

感謝和問候,

Nandini

Ovi
新的貢獻者三世

嗨@Nandini N,

謝謝你的回答也包括一個示例。

但是我對於我的用例,需要使用Scala。

你能點我直接的方向如何實現呢?

再次感謝你,

Ovi

NandiniN
重視貢獻二世
重視貢獻二世

這是一個優雅,它使用isDeltaTable()從DeltaTableUtils和dbutils。

進口org.apache.spark.sql.delta.DeltaTableUtils val s3Path = " s3: / /桶/文件夾”/ /得到所有文件夾的列表在s3路徑val文件夾= dbutils.fs.ls (s3Path) . map (_.path) / /過濾掉任何val nonDeltaFolders =δ表文件夾的文件夾。過濾器(path = > ! DeltaTableUtils.isDeltaTable(路徑))/ /打印的結果列表文件夾nonDeltaFolders.foreach println ()

注意:這個也可以在python(包DeltaTableUtils DeltaTable)

感謝和問候,

Nandini

Ovi
新的貢獻者三世

好的解決方案@Nandini N !

非常感謝指出我!

祝你有美好的一天,

Ovi

歡迎來到磚社區:讓學習、網絡和一起慶祝

加入我們的快速增長的數據專業人員和專家的80 k +社區成員,準備發現,幫助和合作而做出有意義的聯係。

點擊在這裏注冊今天,加入!

參與令人興奮的技術討論,加入一個組與你的同事和滿足我們的成員。

Baidu
map