從 Azure Blob 儲存體匯入

本主題說明如何使用 Azure Machine Learning Studio (傳統) 中的 [匯 入資料 ] 模組,從 Azure Blob 儲存體讀取資料,讓您可以在機器學習實驗中使用資料。

注意

適用于 : Machine Learning Studio (傳統)

此內容僅適用于 Studio (傳統) 。 Azure Machine Learning 設計工具中已新增類似的拖放模組。 若要深入瞭解 這兩個版本,請參閱這篇文章

Azure Blob 服務用於儲存大量資料,包括二進位資料。 您可以使用 HTTP 或 HTTPS 從任何地方存取 Azure blob。 視 blob 儲存體的類型而定,可能需要進行驗證。

  • 任何人或具有 SAS URL 的使用者都可以存取公用 blob。
  • 私人 blob 需要登入和認證。

從 blob 儲存體匯入需要將資料儲存在使用 區塊 blob 格式的 blob 中。 儲存在 blob 中的檔案必須使用以逗號分隔的 ( CSV) 或 tab 鍵分隔的 (TSV) 格式。 當您讀取檔案時,記錄和任何適用的屬性標題會以資料列形式載入至記憶體中,做為資料集。

注意

如果啟用 [需要安全傳輸] 選項,[匯入資料] 模組不支援連接至 Azure Blob 儲存體帳戶。

如需支援與 Azure Machine Learning 搭配使用之 blob 儲存體類型的其他限制,請參閱 技術附注 一節。

提示

需要以不支援的格式匯入資料嗎? 您可以使用 Python 或 R。請參閱 Azure AI 資源庫中的此範例: 從 Azure Blob 儲存體載入非文字檔

如何從 Azure blob 匯入資料

強烈建議您在匯入前先分析資料,以確保架構如預期般運作。 匯入程式會掃描部分的標頭資料列來判斷架構,但之後的資料列可能會包含額外的資料行或造成錯誤的資料。

使用資料匯入嚮導

此課程模組提供新的 wizard,可協助您選擇儲存選項、從現有的訂用帳戶和帳戶中選取,以及快速設定所有選項。

  1. 將 [匯 入資料 ] 模組新增至您的實驗。 您可以在 [ 資料輸入] 和 [輸出 ] 分類中,找到 Studio (傳統) 中的模組。

  2. 按一下 [ 啟動匯入資料] ,並遵循提示進行。

  3. 設定完成時,若要實際將資料複製到您的實驗中,請以滑鼠右鍵按一下模組,然後選取 [ 執行選取 的]。

如果您需要編輯現有的資料連線,則嚮導會載入所有先前的設定詳細資料,如此一來,您就不需要從頭開始。

在 [匯入資料] 模組中手動設定屬性

下列步驟描述如何手動設定匯入來源。

  1. 將 [匯 入資料 ] 模組新增至您的實驗。 您可以在 Studio (傳統) 的 [ 資料輸入和輸出 ] 類別中找到此模組。

  2. 針對 [ 資料來源],選取 [ Azure Blob 儲存體]。

  3. 針對 [ 驗證類型],如果您知道資訊已提供為公用資料源,請選擇 [ 公用 (SAS URL]) 。 SAS URL 是您可以使用 Azure 儲存體公用程式產生之公用存取的時間綁定 URL。

    否則請選擇 [ 帳戶]。

  4. 如果您的資料位於可使用 SAS URL 存取的 公用 blob 中,則您不需要額外的認證,因為 URL 字串包含下載和驗證所需的所有資訊。

    在 [ URI ] 欄位中,輸入或貼上定義帳戶和公用 blob 的完整 URI。

    注意

    在可透過 SAS URL 存取的頁面中,只能使用下列格式來儲存資料: CSV、TSV 及 ARFF。

  5. 如果您的資料位於 私人 帳戶中,您必須提供包含帳戶名稱和金鑰的認證。

    • 針對 [ 帳戶名稱],輸入或貼上包含您要存取之 blob 的帳戶名稱。

      例如,如果儲存體帳戶的完整 URL 是 https://myshared.blob.core.windows.net ,您會輸入 myshared

    • 針對 [ 帳戶金鑰],貼上與帳戶相關聯的儲存體存取金鑰。

      如果您不知道存取金鑰,請參閱本文中的「管理您的 Azure 儲存體帳戶」一節: 關於 Azure 儲存體帳戶

  6. 針對 [ 容器]、[目錄] 或 [blob 的路徑],輸入您想要取出的特定 blob 名稱。

    例如,如果您將名為 data01.csv 的檔案上傳至名為 mymldata 的帳戶中的容器 trainingdata ,則檔案的完整 URL 會是: https://mymldata.blob.core.windows.net/trainingdata/data01.txt

    因此,在 容器、目錄或 blob 的欄位路徑中,您可以輸入: trainingdata/data01.csv

    若要匯入多個檔案,您可以使用萬用字元 * (星號) 或 ? (問號) 。

    例如,假設容器 trainingdata 包含多個相容格式的檔案,您可以使用下列規格來讀取開頭的所有檔案 data ,並將它們串連成單一資料集:

    trainingdata/data*.csv

    您無法在容器名稱中使用萬用字元。 如果您需要從多個容器匯入檔案,請針對每個容器使用個別的 [匯 入資料 ] 模組實例,然後使用 [ 加入資料列 ] 模組合併資料集。

    注意

    如果您已選取選項,請 使用 快取的結果,您對容器中的檔案所做的任何變更都不會觸發實驗中的資料重新整理。

  7. 針對 [ blob 檔案格式],選取一個選項來指出儲存在 blob 中的資料格式,讓 Azure Machine Learning 可以適當地處理資料。 下列為支援的格式:

    • Csv:逗號分隔值 (CSV) 是在 Azure Machine Learning 中匯出和匯入檔案的預設儲存格式。 如果資料已經包含標頭資料列,請務必選取 [檔案 有標頭資料列] 選項,否則會將標頭視為資料列。

      如需 Azure Machine Learning 中使用之 CSV 格式的詳細資訊,請參閱 [轉換成 CSV] (convert-to-csv.md

    • Tsv:以定位字元分隔的值 (TSV) 是許多機器學習工具所使用的格式。 如果資料已經包含標頭資料列,請務必選取 [檔案 有標頭資料列] 選項,否則會將標頭視為資料列。

      如需 Azure Machine Learning 中使用的 TSV 格式的詳細資訊,請參閱 轉換為 TSV

    • ARFF:此格式支援以 Weka 工具組所使用的格式來匯入檔案。 如需詳細資訊,請參閱 轉換為 ARFF

    • 具有指定編碼方式的 csv:針對可能已使用不同欄位分隔符號備妥的 csv 檔案,或如果來源可能使用不同于 utf-8 的字元編碼方式,請使用此選項。 SAS URL 中儲存的檔案不支援此格式。

    • Excel:使用此選項可從儲存在 Azure Blob 儲存體中的 Excel 活頁簿讀取資料。 SAS URL 中儲存的檔案不支援 Excel 格式。

  8. 針對具有特殊編碼的 CSV 檔案,請設定下列其他選項,以控制適當的字元匯入:

    • 逗號分隔符號格式:從作為欄位分隔符號的常用字元清單中選擇,包括逗號 , 定位字元和分號 ;

    • 編碼格式:選擇您要讀取的檔案所使用的字元編碼。 如需支援的編碼清單,請參閱 技術 提示一節。

    • 檔案 具有標頭資料列:如果資料已包含標頭資料列,請選取此選項。 否則,標頭會以資料列的形式匯入。

  9. 針對 Excel 檔案,在指定儲存 Excel 檔案的帳戶和容器之後,您必須使用下列選項來指出 Excel 格式和範圍或資料表名稱:

    • Excel 資料格式:指出資料是在 excel 工作表範圍中,還是在 excel 資料表中。

    • Excel 工作表或內嵌資料表:如果您選取 [ excel 工作表 ] 選項,請指定工作表的名稱, (索引標籤名稱) 或活頁簿中內嵌的資料表。 工作表中的所有資料都是讀取的;您無法指定儲存格的範圍。 如果您選取 [ Excel 資料表 ] 選項,就必須取得資料表名稱,而不是工作表名稱,即使工作表上只有一個資料表。 若要查看資料表名稱,請在資料表中按一下,然後在 [資料表工具] 索引標籤中,查看 [資料表名稱] 屬性。

  10. 執行實驗。

範例

若要瞭解如何在機器學習實驗中使用 Azure Blob 儲存體中的資料,請參閱 azure 資源庫

技術提示

本節包含對常見問題的執行詳細資料、秘訣和解答。

常見問題

是否有任何方法可將資料匯入自動化?

有多種方式可取得新的資料,並使用它來定期更新實驗。 許多取決於來源資料的來源,以及您偏好用於資料移動的工具。 請參閱這些文章以瞭解一些想法。

自動化實驗的執行通常需要建立 web 服務,然後由工作排程器、PowerShell 或其他自訂程式碼來觸發。

當我嘗試從現有的 blob 讀取輸入資料時,為什麼會出現錯誤?

有幾個可能的問題:

  • Blob 使用不支援的格式
  • 帳戶本身是使用 Azure Machine Learning 尚未支援的選項所建立。

不支援的格式:從 Azure Blob 儲存體讀取時,Azure Machine Learning 目前會要求 Blob 使用 區塊 blob 格式,這可讓您有效率地上傳大型 blob。 例如,如果您將 CSV 檔案上傳至 blob 儲存體,檔案會儲存為區塊 blob。 不過,當您以程式設計方式建立 blob 檔案時,可能會產生不同類型的 blob,例如不支援的 AppendBlob 類型。

因應措施是,建議使用 區塊 blob 類型。

重要

建立 blob 之後,無法變更類型。

如需詳細資訊,請參閱 了解區塊 Blob、附加 Blob 和分頁 Blob

不支援的帳戶類型:匯入和匯出模組只能從使用傳統部署模型建立的 Azure 儲存體帳戶讀取和寫入資料。 換句話說,尚未支援提供經常性存取和非經常性儲存體存取層的新 Azure Blob 儲存體帳戶類型。 一般來說,您可能在此服務選項變成可用之前建立的任何 Azure 儲存體帳戶,都應該不會受到影響。

如果您需要建立新的帳戶以用於 Azure Machine Learning,請針對 部署模型 選取 [傳統],或使用 [ Resource manager ],並針對 [帳戶類型] 選取 [一般用途],而非 [ Blob 儲存體]。

如何避免不必要地重新載入相同的資料?

如果您的來源資料有所變更,您可以重新整理資料集,並藉由重新執行匯 入資料來加入新的資料。 但是,如果您不想要在每次執行實驗時從來源重新讀取,請選取 [使用快取的 結果 ] 選項為 [TRUE]。 當此選項設定為 TRUE 時,模組會檢查實驗是否先前使用相同的來源和相同的輸入選項來執行,如果找到上一個執行,則會使用快取中的資料,而不是從來源重新載入資料。

是否可以在從來源讀取資料時篩選資料?

入資料 模組不支援在讀取資料時進行篩選。

將資料載入 Azure Machine Learning Studio (傳統) 之後,您可以使用下列工具來修改資料:

  • 使用自訂 R 腳本來篩選或轉換資料。

  • 使用「 分割資料 」模組搭配相對運算式或正則運算式來隔離您要的資料,然後將它儲存為資料集。

如果您發現載入的資料超過您需要的數量,您可以藉由讀取新的資料集來覆寫資料集,並指定要使用與較舊的較舊資料相同的名稱來儲存資料集。

當匯入程式在找到尾端新行時,為何會在資料集的結尾處新增額外的資料列?

如果 [匯 入資料 ] 模組遇到的資料列後面是空白行或尾端換行字元,則會在資料表結尾處加入包含遺漏值的額外資料列。

將尾端新行解釋為新資料列的原因是匯 入資料 無法判斷實際空白行與使用者在檔案結尾處按 enter 鍵時所建立的空白行之間有何差異。

由於某些機器學習演算法支援遺漏資料,因此會將這一行視為案例 (而這可能會影響) 的結果,因此您應該使用「 清除遺漏的資料 」來檢查是否有遺漏值,並視需要加以移除。

檢查空白資料列之前,您可能也會想要將具有部分遺漏值之其他資料列的最後一個空白資料列分開,這可能代表來源資料中的實際遺漏值。 若要這樣做,您可以使用 分割資料來分割資料集。 選取 [ 選取前 N 個數據列] 選項,以讀取所有資料列,但最後一個資料列。

如果您匯入從不同地理區域載入的資料,會發生什麼事?

如果 blob 或資料表儲存體帳戶與用於機器學習實驗的計算節點位於不同的區域,則資料存取可能會變慢。 此外,您需支付訂用帳戶的資料輸入和輸出費用。

為何來源檔案中的某些字元無法正確顯示在標頭中?

Azure Machine Learning 通常支援 UTF-8 編碼。 如果來源檔案使用另一種編碼類型,字元可能無法正確匯入。

如果您無法正確載入資料,請嘗試使用 [使用編碼的 CSV] 選項,並指定自訂分隔符號、字碼頁等項目的參數。

匯入期間是否有任何禁止的字元或字元變更?

如果屬性資料包含引號或逸出字元序列,將比照 Microsoft Excel 中處理這類字元的規則來處理。 所有其他字元都是使用下列規格做為指導方針: RFC 4180

直接將本機資料集上傳至 Azure Machine Learning 的大小限制為 1.98 GB。 使用非常大型的檔案時,將資料集新增至您的實驗帳戶可能需要很長的時間才能完成。

  • 估計10分鐘或更多每 GB 的資料。
  • 若要將效能優化,請使用 Azure ML 服務所使用之相同區域中的儲存體帳戶。

若要上傳較大的檔案(最多 10 GB),有數種方法:

  • 使用 zip 壓縮檔案。 您可以使用壓縮格式將資料集上傳至 Azure ML Studio (傳統) ,然後使用 [ 解壓縮壓縮的資料集 ] 模組,將資料集解壓縮並儲存。 壓縮的資料集也可以使用「 執行 R 腳本 」模組來解壓縮,但效能可能會受到限制。

  • 使用快速的 Azure 公用程式,例如 AzCopy。 使用 AzCopy之類的公用程式,將資料暫存至 Microsoft Azure Blob 儲存體。 然後,使用 [匯 入資料 ] 模組,將資料從 blob 儲存體匯入到 Studio (傳統) 。

    例如,下列程式碼顯示寫入 blob 儲存體的 AzCopy 語法。

    cd "C:\Program Files (x86)\Microsoft SDKs\Azure\AzCopy"
    .\AzCopy.exe /Source:C:\LocalFolder /Dest:https://mystorage.blob.core.windows.net/mycontainer /DestKey:MyStorageAccountKey /Pattern:myfile.csv
    

我使用指定的編碼方式匯入 CSV 檔案,但使用選項來視覺化時,不會正確地顯示文字。 為什麼?

針對已上傳的資料集,Azure Machine Learning 通常僅支援 UTF-8。 不過,「匯 入資料 」模組支援其他編碼格式。 因此,當您使用上述其中一種格式匯入檔案之後,可能會發現這些字元未正確顯示。 解決方法是使用下列其中一種方法,將編碼轉換為 UTF-8:

  • 將匯入的資料儲存為資料集。 (使用儲存的資料集,而不是 CSV 資料,也可以改善效能。 )

  • 如果您在 [ 執行 R 腳本 ] 模組中使用資料集,您可以使用如下的腳本來強制執行正確的編碼:

    dataset <- maml.mapInputPort(1)
    Encoding(dataset$city) <- "UTF-8"
    maml.mapOutputPort("dataset")
    

    然後,您可以在 [執行 R 腳本] 模組的輸出上使用 [ 視覺化 ],並確認是否已正確顯示字元。

匯入文字檔有哪些選項? CSV 不適合我的資料。

處理和清除非結構化文字以配合整齊的資料行,一律是一項挑戰。 但是,如果您需要匯入文字資料的資料行,TSV 格式通常會顯示較少的問題,不過您仍然需要事先檢查超過的定位字元。

建議您複習AZURE AI 資源庫中的文字分類範本,以查看在 azure Machine Learning Studio 中內嵌和處理 (傳統) 的範例。

CSV 檔案的自訂編碼

「匯 入資料 」模組的早期版本不支援某些類型的有效 CSV 檔案。 例如,從 Excel 匯出的資料有時候會包含使檔案無法正確剖析的字元。

為了支援更廣泛的分隔符號和字元格式範圍,[匯 入資料 ] 現在支援選擇分隔符號和編碼格式。 如果您使用 [使用編碼的 CSV] 選項,結果將是 CSV 檔案更可靠且更有效率的剖析。

您可以使用下列字元編碼:

類型 編碼
Unicode Unicode (UTF-8)

Unicode

Unicode (UTF-32)

Unicode (UTF-7)
CJYK 繁體中文 (Big5)

簡體中文 (GB2312)

簡體中文 (Mac)

簡體中文 (GB2312-80)

簡體中文 (ISO-2022)

簡體中文 (GB18030)

日文 (JIS)

韓文 (ISO)

韓文 (Mac)
其他 西歐語系 (Windows)

西歐語系 (ISO)

希伯來文 (SO-Visual)

US ASCII

提示

CSV 匯入完成之後,建議您將匯入的檔案儲存為資料集,以確保匯入的資料在您的實驗中使用 UTF-8 編碼。

CSV 和 TSV 格式的資料類型推斷

當「匯 入資料 」模組從 Azure Blob 儲存體中的 CSV 或 TSV 檔案載入資料時,類型 guesser 會在來源檔案中尋找類別或數值資料,並在新資料集的中繼資料中表示探索到的類型。

不過,在載入資料之後,您可以在 [ 編輯中繼資料 ] 模組中編輯資料行屬性,以覆寫類型 guesser 的結果。

模組參數

一般選項

Name 範圍 類型 預設 描述
資料來源 List 資料來源或接收 Azure Blob 儲存體 資料來源可以是 HTTP、FTP、匿名 HTTPS 或 FTPS、Azure BLOB 儲存體中的檔案、azure 資料表、Azure SQL Database、內部部署 SQL Server 資料庫、Hive 資料表或 OData 端點。
驗證類型 PublicOrSas/帳戶 String 帳戶 指定資料是否位於可透過 SAS URL 存取的公用容器,或位於需要驗證存取權的私人儲存體帳戶中。
使用快取的結果 TRUE/FALSE Boolean FALSE 選取以避免在執行之間載入資料

公用或 SAS-公用儲存選項

Name 範圍 類型 預設 描述
URI 任意 String HDFS rest 端點
檔案格式 ARFF、CSV 或 TSV String CSV 選取其中一個支援的格式
URI 有標頭資料列 Boolean TRUE/FALSE true 如果檔案包含標頭資料列,則為 True;如果為 False,則會使用第一個資料列做為資料行標題

帳戶-私用儲存選項

Name 範圍 類型 預設 描述
帳戶名稱 任意 String 輸入儲存體帳戶的名稱
帳戶金鑰 任意 SecureString 貼上帳戶金鑰
容器、目錄或 Blob 的路徑 任意 String N/A 輸入容器或目錄名稱
Blob 檔案格式 ARFF、CSV 或 TSV String CSV 選取其中一個支援的格式
檔案具有標頭資料列 任意 字串 True Azure 儲存體帳戶名稱

輸出

名稱 類型 Description
結果資料集 資料表 具有匯入資料的資料集

例外狀況

例外狀況 描述
錯誤 0027 當兩個物件的大小必須相同但卻不同時,就會發生例外狀況。
錯誤 0003 如果一或多個輸入是 Null 或空白,就會發生例外狀況。
錯誤 0029 傳遞無效的 URI 時,就會發生例外狀況。
錯誤 0030 無法下載檔案時,就會發生例外狀況。
錯誤 0002 如果有一或多個參數無法剖析或從指定的類型轉換成目標方法所需的類型,就會發生例外狀況。
錯誤 0009 如果指定的 Azure 儲存體帳戶名稱或容器名稱不正確,就會發生例外狀況。
錯誤 0048 無法開啟檔案時,就會發生例外狀況。
錯誤 0046 無法在指定的路徑上建立目錄時,就會發生例外狀況。
錯誤 0049 無法剖析檔案時,就會發生例外狀況。

如需 Studio (傳統) 模組特定的錯誤清單,請參閱 機器學習錯誤碼

如需 API 例外狀況的清單,請參閱 機器學習 REST API 錯誤碼

另請參閱

匯入資料
匯出資料
透過 HTTP 從 Web URL 匯入
從 Hive 查詢匯入
從 Azure SQL Database 匯入
從 Azure 資料表匯入
從資料摘要提供者匯入
從內部部署 SQL Server 資料庫匯入