[英]Loop through RDD elements, read its content for further processing
我有一個包含n
個文件的文件夾。
我正在創建一個 RDD,其中包含上述文件夾的所有文件名,代碼如下:
fnameRDD = spark.read.text(filepath).select(input_file_name()).distinct().rdd)
我想遍歷這些RDD
元素並處理以下步驟:
我已經寫了一個 Function,其中包含我已經針對單個文件測試過的步驟並且它工作正常但是我在語法上嘗試了各種方法來完成前 2 個步驟,但我每次都得到無效的語法。
我知道我不應該使用map()
因為我想在每次迭代中讀取一個需要sc
的文件,但是map
將在無法引用sc
的工作節點內執行。
另外,我知道我可以使用wholeTextFiles()
作為替代方法,但這意味着我將在整個過程中擁有 memory 中所有文件的文本,這對我來說似乎效率不高。
我也願意接受有關不同方法的建議。
我相信您正在尋找遞歸文件查找,
spark.read.option("recursiveFileLookup", "true").text(filepathroot)
如果將其指向文件的根目錄,spark 將遍歷該目錄並選取位於根文件夾和子文件夾下的所有文件,這會將文件讀入單個 dataframe
可能還有其他更有效的方法,但假設您已經有一個 function SomeFunction(df: DataFrame[value: string])
,最簡單的方法是在fnameRDD
上使用toLocalIterator()
一次處理一個文件。 例如:
for x in fnameRDD.toLocalIterator():
fileContent = spark.read.text(x[0])
# fileContent.show(truncate=False)
SomeFunction(fileContent)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.