You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Azure Databricks Notebook中调用.NET UDF并部署依赖?

在Azure Databricks Notebook中调用.NET Spark注册的UDF及依赖安装指南

一、集群.NET Spark环境确认

  • 确保集群使用支持.NET的Databricks Runtime版本(推荐Runtime 11.3 LTS及以上,创建集群时需勾选.NET选项)
  • 检查集群Spark配置,确认spark.dotnet.root已指向正确的.NET Spark安装路径(Databricks默认集群通常已配置,自定义集群需手动验证)

二、部署.NET应用包到集群

将本地发布的.NET程序集及依赖上传至DBFS(Databricks文件系统):

  • 使用dotnet publish -c Release -r linux-x64 --self-contained false生成依赖分离的发布包,将所有输出文件上传至DBFS目录(例如dbfs:/dotnet-apps/MySparkApp/)
  • 若存在第三方NuGet依赖,需将所有依赖DLL一并上传至同一目录

三、Notebook中调用UDF的两种方式

方式1:Scala/Python Notebook调用

在Notebook首单元格配置加载.NET程序集,随后直接调用UDF:

// 配置.NET程序集路径
spark.conf.set("spark.dotnet.assembly.path", "dbfs:/dotnet-apps/MySparkApp/MySparkApp.dll")

// 创建测试数据并调用UDF
val testDF = spark.createDataFrame(Seq("Alice", "Bob")).toDF("name")
testDF.select(callUDF("UDF_GetName", col("name"))).show()

方式2:C# Notebook直接调用

加载程序集后手动注册UDF并使用:

// 加载DBFS中的.NET程序集
System.Reflection.Assembly.LoadFrom("/dbfs/dotnet-apps/MySparkApp/MySparkApp.dll");

// 获取或创建Spark会话
var spark = SparkSession.Builder().GetOrCreate();

// 注册UDF(若原程序中UDF注册逻辑未被自动执行)
Func<string, string> getName = MySparkApp.Program.GetName;
spark.Udf().Register("UDF_GetName", getName);

// 调用UDF
var testDF = spark.CreateDataFrame(new[] { "Alice", "Bob" }).ToDF("name");
testDF.Select(Functions.CallUDF("UDF_GetName", Functions.Col("name"))).Show();

四、优化建议与问题排查

  • UDF注册逻辑解耦:将UDF注册代码从Main方法中抽离为独立静态类,方便Notebook直接调用:
    namespace MySparkApp
    {
        public static class UdfHelper
        {
            public static void RegisterAllUdfs(SparkSession spark)
            {
                spark.Udf().Register("UDF_GetName", (string name) => $"Hello {name}");
            }
        }
    }
    
    随后在C# Notebook中执行:
    MySparkApp.UdfHelper.RegisterAllUdfs(spark);
    
  • 常见问题:
    • UDF找不到:检查DBFS路径是否正确、集群是否有路径读写权限
    • 版本不兼容:确保.NET程序集目标框架与集群.NET运行时版本一致(如集群用.NET 6,程序集需编译为.NET 6)
    • 会话隔离:控制台应用的Spark会话与Notebook会话独立,需确保UDF在Notebook的会话中完成注册

内容的提问来源于stack exchange,提问作者Neeraj Kumar Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 08:25:35