Не удается прочитать файл Excel с помощью U-SQL - PullRequest
0 голосов
/ 23 октября 2018

Я пытаюсь прочитать файл Excel, и мне нужно записать его в файл CSV в Azure Datalake.Когда я пытаюсь это сделать, появляется ошибка.

U-SQL Script:

DECLARE @ExcelFile = @"/Output/demog_data_Merged_08022017.xlsx";

@result01 = EXTRACT Id string,
UNIQUE_ID long,
SOL_ID int,
EMAIL_ID string,
mobilenumber string,
CUST_OPN_DATE DateTime,
gender char,
age int,
CUR_CITY string,
CUR_COUNTRY string,
CUR_PIN string,
NRE_CNTRY string,
MARITAL_STATUS char,
FREZ_CODE char,
UNFREEZ_DATE DateTime,
LAST_FREZ_DATE DateTime,
DORMANCY_STATUS char,
AVAILABLE_AMOUNT double,
ACCOUNT_OPEN_DATE DateTime,
nullcol string,
Salaried_account_flag char,
ACCOUNT_TYPE string
FROM @ExcelFile
USING new oh22is.Analytics.Formats.ExcelExtractor("result01");


@result02 = SELECT * FROM @result01;

OUTPUT @result02 TO "/output/demog_for_report.csv"
USING Outputters.Csv();

Ошибка:

{
    "errorCode": "2703",
    "message": "Error Id: E_CSC_USER_INVALIDCSHARP, Error Message: C# error CS0246: The type or namespace name 'oh22is' could not be found (are you missing a using directive or an assembly reference?). ",
    "failureType": "UserError",
    "target": "U-SQL1"
}

1 Ответ

0 голосов
/ 06 июня 2019

Файлы Excel не могут быть прочитаны без ссылки на сборку.Вам нужны файлы DocumentFormat.OpenXml.dll и oh22is.Analytics.Formats.dll в вашем каталоге озера данных вместе с файлом Excel (не обязательно в той же папке).

Ссылки на сборки содержат логику чтения файлов и действуют как шлюз междувнутреннее представление данных в u-sql и формат файла, позволяющий обработать данные, как они могут быть обработаны.

К сожалению, насколько я знаю, эти файлы не распространяются по отдельности, и Microsoft, похоже, требует, чтобы вы компилировали их вручную из источника с в этом хранилище с Visual Studio.Хорошая вещь об использовании VS заключается в том, что вы можете ссылаться на сборки напрямую, чтобы ускорить разработку (но я нахожу это бессмысленным, так как я использую его только для извлечения Excel и должен генерировать файлы только один раз).Процесс компиляции также должен предоставить вам динамически связанную библиотеку из пакета documentformat.openxml , чтобы вам не приходилось загружать ее или извлекать из файла .nupkg, что, если вы это сделаете,предпочитаю использовать версию на /lib/net40/DocumentFormat.OpenXml.dll, что сработало для моего файла xlsx (формат 2007-2019).

После помещения файлов сборки (двух файлов .dll) в озеро данных сделайте заметкуих пути и использовать их как следующий скрипт u-sql:

// Register the dependency to the analytics assembly (xml file reader)
DROP ASSEMBLY IF EXISTS openxml;
CREATE ASSEMBLY openxml FROM @"/MyProject/Assemblies/DocumentFormat.OpenXml.dll";
REFERENCE ASSEMBLY openxml;

// Register the analytics assembly that read our excel file
DROP ASSEMBLY IF EXISTS analytics;
CREATE ASSEMBLY analytics FROM @"/MyProject/Assemblies/oh22is.Analytics.Formats.dll";
REFERENCE ASSEMBLY analytics;

// Define a local variable for the excel file
DECLARE @ExcelFile = @"/MyProject/MyFolder/test-file.xlsx";

@sheet = EXTRACT
    A string,
    B string,
    C string
FROM @ExcelFile
    USING new oh22is.Analytics.Formats.ExcelExtractor("Sheet1");

//And you can save, transform, select it like you would use any other data:

OUTPUT (SELECT * FROM @sheet) TO "/MyProject/output.csv" USING Outputters.Csv();
...