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

Spark(Databricks)处理小型Excel文件,选Pandas还是PySpark性能更优?

Spark(Databricks)处理万行级小Excel的性能最优方案

核心结论

针对10000行以内的小型Excel文件,用Pandas在Driver节点完成全量转换操作、仅在必要时转Spark DataFrame的方案性能最优,原有的「Pandas读取后立即转Spark DF再做处理」的方式确实存在不必要的性能开销。


具体原因分析

  • Spark作为分布式计算框架,天生为TB/PB级大规模数据集设计,任何Spark转换操作都需要经过DAG调度、任务拆分、Executor进程间通信等固定流程,哪怕数据量只有几KB,这套调度开销也不会减少。针对万行级别的小数据,调度开销往往是实际计算开销的几十到上百倍。
  • 万行级别的Excel数据加载到Driver内存完全无压力,哪怕是Databricks最小规格的Driver节点,也能轻松支撑百万行级别的Pandas内存计算,所有操作都是单节点内存内运算,无额外调度开销,计算效率远高于Spark。
  • 小数据量下spark.createDataFrame(pandas_df)的转换开销极低,完全可以在需要用到分布式能力的时候再做转换,不会产生明显耗时。

适用场景与代码示例

场景1:仅处理当前小文件,后续无大规模数据复用需求(推荐方案)

所有转换逻辑直接用Pandas实现,仅在需要写入分布式表、关联其他大规模Spark数据集时再转Spark DF:

import pandas as pd

# 读取Excel,/dbfs/路径可以直接访问Databricks文件存储
df = pd.read_excel("/dbfs/mnt/your_file_path/file.xlsx")

# 全量转换操作直接用Pandas实现
df = df[df["sales"] > 0]
df["profit_rate"] = df["profit"] / df["sales"]

# 仅在必要时转换为Spark DF
spark_df = spark.createDataFrame(df)

场景2:当前处理逻辑后续需要兼容大规模Excel文件

可以直接用Spark的Excel数据源读取文件,省略Pandas中转步骤,保证逻辑的统一性,万行级场景下性能差异在秒级,不会影响核心使用体验:

# 直接用Spark API读取Excel,依赖crealytics excel包(Databricks runtime默认预装)
spark_df = spark.read.format("com.crealytics.spark.excel") \
    .option("header", "true") \
    .option("inferSchema", "true") \
    .load("mnt/your_file_path/file.xlsx")

# 所有转换用Spark API实现
spark_df = spark_df.filter(spark_df.sales > 0).withColumn("profit_rate", spark_df.profit / spark_df.sales)

性能参考

同一份10000行Excel文件在Databricks社区版的实测耗时:

  • Pandas全量处理+按需转Spark DF:1~2秒
  • Pandas读取后立即转Spark DF再处理:3~5秒
  • 直接用Spark读取+处理:4~6秒

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 14:06:08