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

Spark升级至3.2后Superset SQL Labs查询Trino表值错位问题

问题:Spark 3.2生成Parquet表在Trino查询时数据错位

在Spark中将Parquet文件保存为表后,复制为Trino中的Hive表(同Parquet格式),使用Superset SQL Labs查询时出现部分行的值错位问题:直接查询Spark表结果正常,但SQL Labs返回的结果里部分行的有效值位置错误。该问题在Spark从3.1升级到3.2后出现,执行spark.catalog.clearCache()清除缓存后无改善。

数据示例

Spark表查询结果

+----------+----------+----------+
| Column 1 | Column 2 | Correct? |
+----------+----------+----------+
| ABC      | ABC      | Yes      |
| DEF      | DEF      | Yes      |
| GHI      | GHI      | Yes      |
| JKL      | JKL      | Yes      |
+----------+----------+----------+

Superset SQL Labs查询结果

+----------+----------+----------+
| Column 1 | Column 2 | Correct? |
+----------+----------+----------+
| ABC      | GHI      | No       |
| DEF      | DEF      | Yes      |
| GHI      | ABC      | No       |
| JKL      | JKL      | Yes      |
+----------+----------+----------+

版本信息

  • Spark 3.2
  • Trino 363(集成在Superset中)
  • PySpark 3.2.1
  • Superset 1.3.1

可能的解决方案

  • 检查Parquet写入兼容配置:Spark 3.2将spark.sql.parquet.writeLegacyFormat默认值从true改为false,导致生成的Parquet格式与旧版读取逻辑不兼容。尝试设置该参数为true后重新写入表:
    spark.conf.set("spark.sql.parquet.writeLegacyFormat", "true")
    # 重新执行表写入逻辑
    
  • 刷新Hive元数据:Spark写入表后,执行MSCK REPAIR TABLE <table_name>刷新Hive元数据,确保Trino读取的表结构与Spark表完全一致,包括列名、数据类型、分区信息。
  • 调整Trino Parquet读取配置:在Trino中启用parquet.legacy-reader参数,强制使用兼容模式读取Spark 3.2生成的Parquet文件。
  • 排查分区与排序逻辑:若为分区表,检查分区键是否配置正确;同时验证Spark写入时的排序规则,避免因Spark 3.2排序逻辑变更导致数据存储顺序混乱,引发Trino读取错位。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 21:55:27