2016-04-01 21 views
0

我嘗試創建一個自定義並行提取器,但我不知道它是如何正確的。我有一個大文件(超過250 MB),其中每行的數據存儲在4行中。一個文件行存儲一列的數據。這可能爲大文件創建工作並行提取器嗎?恐怕一行的數據在文件分割後會有不同程度的變化。自定義並行提取器 - U-SQL

例子:

... 
Data for first row 
Data for first row 
Data for first row 
Data for first row 
Data for second row 
Data for second row 
Data for second row 
Data for second row 
... 

對不起,我的英語水平。

回答

0

我發現我不能使用靜態方法在USING語句中獲得IExtractor實現的實例,如果我想使用AtomicFileProcessing設置爲true。

0

我想,你可以使用U-SQL按順序並行地處理這些數據。您必須編寫一個自定義的應用程序來獲取單行/多行並返回單行/多行。然後,您可以使用CROSS APPLY調用它。您可以從this申請者處獲得幫助。

+0

對不起,我無法想象。如何按順序處理這些數據?如果我將平行地從文件中逐行讀取數據(提取器allways並行讀取數據,並且AtomicFileProcessing設置爲true,我不知道爲什麼),它們將按不正確的順序排列,因爲一行的數據可能處於不同的文件範圍。這個應用程序應該做什麼? – mieszko91

0

默認情況下,U-SQL提取器被擴展爲在輸入文件的較小部分(稱爲擴展盤區)上並行工作。這些範圍每個大小約爲250MB。

今天,您必須將文件上傳爲行結構文件,以確保行與邊界邊界對齊(儘管我們將在不久的將來爲跨越邊界邊界的行提供支持)。不管怎樣,提取器UDO模型都不知道你的4行是全部在同一範圍內還是跨越它們。

所以,你有兩個選擇:

  1. 馬克提取與提取類之前添加以下行對整個文件操作:

    [SqlUserDefinedExtractor(AtomicFileProcessing = true)] 
    

    現在提取會看到完整的文件。但是,您將文件處理的規模放大了。

  2. 您每行提取一行並使用U-SQL語句(例如使用Window函數或自定義REDUCER)將行合併到單個行中。

+0

在我對之前留言的評論中,我寫下了爲什麼這些解決方案不適用於我的情況。 「...如果我將平行地從文件中逐行讀取數據(提取器allways並行讀取數據,同時AtomicFileProcessing設置爲true,我不知道爲什麼),它們將按不正確的順序排列,因爲一行的數據可以在不同的文件範圍..「 – mieszko91