首页 > 解决方案 > 如何在不使用 Visual Studio 的情况下在 Microsoft azure 数据分析中引用用户定义的运算符 (UDO)

问题描述

我在 azure datalake 中有 tsv 文件,该文件具有以下字段。

paperId,语言代码

我需要提供一个包含以下字段的文件

语言 ID,语言代码

其中 language_id 是为每个语言代码生成的唯一 ID。

为此,我编写了一个 UDO。我关注了文章https://docs.microsoft.com/en-us/azure/data-lake-analytics/data-lake-analytics-u-sql-develop-user-defined-operators

using Microsoft.Analytics.Interfaces;
using System.Collections.Generic;

namespace USQL_UDO
{
   public class LanguageCode : IProcessor
   {
       private static IDictionary<string, string> languageCodeID = new Dictionary<string, string>
       public override IRow Process(IRow input, IUpdatableRow output)
       {
            string UserID = input.Get<long>("PaperId");
            string LanguageCode = input.Get<string>("LanguageCode");
            string Language_id = "";

            if (languageCodeID.Keys.Contains(LanguageCode))
            {
                Language_id = languageCodeID[LanguageCode];
            }else
            {
                Language_id = GetTimestamp(DateTime.Now);
                languageCodeID[LanguageCode] = Language_id;
            }
            output.Set<string>(0, Language_id);
            output.Set<string>(1, LanguageCode);

            return output.AsReadOnly();
    }

    public static String GetTimestamp(this DateTime value)
    {
        return value.ToString("yyyyMMddHHmmssfff");
    }

   }
}

但是我想不出一种在我的 usql 脚本中引用它的方法。我在 linux 环境下工作时无法使用 Visual Studio。有没有办法在 usql 查询中引用自定义类。

我对 usql 和 azure 很陌生。我可能会以完全不明智的方式来做这件事。

我的 usql 脚本是这样的。

@inputA =
EXTRACT 
    PaperId long,
    LanguageCode string


FROM "/graph/2018-04-13/PaperLanguages.txt"
USING Extractors.Tsv(quoting : false);

@parsed_language =
     PROCESS @inputA
     PRODUCE Language_id string,
             LanguageCode string
     USING new USQL_UDO.LanguageCode();


OUTPUT @parsed_language
     TO "/output/parsedData/mag2__language.csv"
     USING Outputters.Text(outputHeader : true, quoting : false, delimiter: '~');

标签: azure-data-lakeu-sql

解决方案


你可以改用 Linux 中的 VS Code ADL 工具吗?

在最坏的情况下,您将编译代码并将 dll 上传到您的 Azure Data Lake Store 或 Azure 存储帐户,然后使用CREATE ASSEMBLY. 然后在你的 U-SQL 脚本中,你引入了带有REFERENCE ASSEMBLY语句的代码。

一些例子在这里:https ://blogs.msdn.microsoft.com/azuredatalake/2016/08/26/how-to-register-u-sql-assemblies-in-your-u-sql-catalog/


推荐阅读