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

如何在不依赖Python的情况下将本地Parquet文件上传至远程Databricks表?

无需Python上传Parquet至Databricks的方案

一、用Databricks REST API直接上传

Databricks提供了两类REST API可直接上传文件,完全不需要依赖Python。

1. DBFS API(上传到Databricks文件系统)

适合将文件上传到DBFS(Databricks的分布式文件系统),支持小文件直接上传和大文件分块上传:

小文件上传示例(.NET代码)

using System.Net.Http;
using System.Net.Http.Headers;
using System.IO;
using System.Text.Json;

var databricksToken = "你的个人访问令牌";
var workspaceUrl = "https://<你的Databricks工作区URL>";
var dbfsTargetPath = "/dbfs/mnt/your-storage/your-file.parquet";
var localParquetPath = @"C:\local-data\output.parquet";

using var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", databricksToken);

// 直接上传小文件(建议文件大小不超过100MB)
var fileContent = new ByteArrayContent(File.ReadAllBytes(localParquetPath));
var uploadResponse = await httpClient.PutAsync(
    $"{workspaceUrl}/api/2.0/dbfs/put?path={dbfsTargetPath}&overwrite=true",
    fileContent
);
uploadResponse.EnsureSuccessStatusCode();

大文件分块上传示例(.NET代码)

// 初始化客户端和令牌
using var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", databricksToken);

var dbfsTargetPath = "/dbfs/mnt/your-storage/large-file.parquet";
var localParquetPath = @"C:\local-data\large-output.parquet";

// 第一步:创建文件获取句柄
var createRequest = new { path = dbfsTargetPath, overwrite = true };
var createContent = new StringContent(
    JsonSerializer.Serialize(createRequest), 
    System.Text.Encoding.UTF8, 
    "application/json"
);
var createResponse = await httpClient.PostAsync(
    $"{workspaceUrl}/api/2.0/dbfs/create",
    createContent
);
createResponse.EnsureSuccessStatusCode();
var handle = JsonSerializer.Deserialize<dynamic>(await createResponse.Content.ReadAsStringAsync()).handle;

// 第二步:分块读取并上传(这里用1MB块)
using var fileStream = File.OpenRead(localParquetPath);
var buffer = new byte[1024 * 1024];
int bytesRead;
while ((bytesRead = await fileStream.ReadAsync(buffer, 0, buffer.Length)) > 0)
{
    var blockContent = new ByteArrayContent(buffer, 0, bytesRead);
    var blockResponse = await httpClient.PostAsync(
        $"{workspaceUrl}/api/2.0/dbfs/add-block?handle={handle}",
        blockContent
    );
    blockResponse.EnsureSuccessStatusCode();
}

// 第三步:关闭文件完成上传
var closeResponse = await httpClient.PostAsync(
    $"{workspaceUrl}/api/2.0/dbfs/close?handle={handle}",
    null
);
closeResponse.EnsureSuccessStatusCode();

2. Workspace Files API(上传到Workspace目录)

如果要将文件上传到Databricks Workspace的目录(而非DBFS),可以使用workspace/files/upload端点,用法和DBFS API类似,只是端点路径不同,同样支持分块上传。

二、ODBC的可行性说明

ODBC主要用于查询Databricks中的数据,不能直接通过ODBC上传本地Parquet文件。不过可以通过ODBC执行SQL命令,间接加载已上传到云存储的Parquet文件:

  1. 先将.NET生成的Parquet文件上传到Databricks可访问的云存储(比如Azure ADLS、AWS S3)
  2. 通过ODBC连接Databricks,执行COPY INTO命令加载文件到表中:
COPY INTO my_catalog.my_schema.target_table
FROM 'abfss://container@storageaccount.dfs.core.windows.net/path/to/parquets'
FILEFORMAT = PARQUET
OVERWRITE = TRUE;

这种方式需要依赖云存储作为中转,但全程不需要Python。

三、推荐方案:云存储集成(高效且低成本)

如果你的Databricks部署在云环境,最推荐的流程是:

  • .NET项目直接将Parquet文件上传到对应云的存储服务(Azure Blob/ADLS、AWS S3、GCS)
  • 在Databricks中创建外部表,或者执行COPY INTO将云存储中的文件同步到Delta Lake表
    这种方式避免了直接上传到Databricks的带宽限制,性能更优,且无需额外依赖Python。

内容的提问来源于stack exchange,提问作者Chechy Levas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 09:36:14