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

使用Kusto Spark连接器读取时遇DELTA_BYTE_ARRAY编码不支持问题求助

问题分析与解决方案

错误原因

这个错误是由于Kusto服务近期更新了Parquet文件的导出编码逻辑,启用了DELTA_BYTE_ARRAY编码来优化存储和导出性能,但Spark的Parquet向量化读取器(默认开启)在Spark 3.3以下的旧版本中不支持这种编码格式。

不管是Kusto Spark连接器的Distributed模式(本质是先将Kusto数据导出为Parquet再由Spark读取),还是直接读取Kusto导出的Parquet文件,都会触发这个不兼容问题。

解决方案

1. 根本解决:升级Spark版本

Spark 3.3及以上版本已经原生支持DELTA_BYTE_ARRAY编码,升级到对应版本后,无需修改任何配置即可正常读取,同时能保留向量化读取的性能优势。

2. 临时规避方案(无法升级Spark时)

你当前使用的spark.sql.parquet.enableVectorizedReader=false和parquet.split.files=false确实能解决问题,但需要明确其影响:

  • 关闭向量化读取会降低Parquet文件的读取性能,因为向量化读取通过批量处理数据提升效率,关闭后会回到逐行解析模式,大文件场景下性能下降明显。
  • parquet.split.files=false会禁用文件拆分,每个Parquet文件只能由一个Spark任务处理,降低读取并行度,同样会影响大数据集的读取速度。

如果必须使用这个方案,建议仅针对受影响的读取任务单独设置参数,而非全局配置,减少对其他任务的影响:

// 直接读取Parquet文件的场景
spark.read
  .option("spark.sql.parquet.enableVectorizedReader", "false")
  .option("parquet.split.files", "false")
  .parquet("<你的Parquet文件路径>")

// Kusto Spark连接器读取的场景
spark.read
  .format("com.microsoft.kusto.spark.datasource")
  .option("spark.sql.parquet.enableVectorizedReader", "false")
  .option("parquet.split.files", "false")
  // 补充你的Kusto连接参数
  .load()

3. 替代读取模式

如果数据量不大,可切换到Kusto Spark连接器的Single模式读取数据。该模式不依赖Parquet导出,直接从Kusto拉取数据,不会触发编码兼容问题,但不适合超大规模数据集的读取。

内容的提问来源于stack exchange,提问作者Ohad Bitton

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 08:45:26