当前位置: 首页 > news >正文

[论文阅读] 从 5MB 到 1.6GB 数据:Java/Scala/Python 在 Spark 中的性能表现全解析

从 5MB 到 1.6GB 数据:Java/Scala/Python 在 Spark 中的性能表现全解析

arXiv:2510.19012 (cross-list from cs.DC)
Comparative analysis of large data processing in Apache Spark using Java, Python and Scala
Ivan Borodii, Illia Fedorovych, Halyna Osukhivska, Diana Velychko, Roman Butsii
Comments: CITI 2025, 3rd International Workshop on Computer Information Technologies in Industry 4.0, June 11-12, 2025, Ternopil, Ukraine. The article includes 10 pages, 5 figures, 9 tables
Subjects: Distributed, Parallel, and Cluster Computing (cs.DC); Databases (cs.DB); Programming Languages (cs.PL); Software Engineering (cs.SE)

1. 一段话总结

本研究针对Apache Spark中使用Java、Python、Scala三种编程语言处理大数据的性能展开对比分析,以ETL流程(提取-转换-加载) 为核心,将来自open-meteo(1.6GB 2024年小时气温数据)和simplemaps.com(5MB 47k城市地理数据)的数据集加载到Apache Iceberg表中,在统一硬件(Windows 10、16GB RAM、Ryzen 5 4600H)和软件配置(Spark 3.5.1、Iceberg 1.7.1)下测试执行时间;结果显示Python在中小数据集(world_cities表6.71秒、weather_events表46.34秒)处理中更快,而Scala在复杂多步骤ETL任务(weather_hourly_events表374.42秒)中表现最优(优于Java的379.8秒和Python的398.32秒),最终得出“语言选择需结合数据集规模与任务复杂度,需同时考虑Spark参数与语言执行特性”的结论。


2. 思维导图

在这里插入图片描述


3. 详细总结

1. 研究背景与意义
  • 研究对象:Apache Spark中Java、Python、Scala三种编程语言的大数据处理性能差异,聚焦ETL全流程(数据提取、转换、加载到Apache Iceberg表)。
  • 研究必要性:现有文献多关注单一语言或部分处理阶段,缺乏“统一配置下全周期语言影响”的综合分析;而Spark语言选择会显著影响执行时间、内存消耗、扩展性,尤其大规模数据处理中,几秒延迟可能放大为小时级耗时。
  • 核心目标:在相同Spark配置、输入数据集下,对比三种语言的ETL性能,为大数据系统设计提供语言选择依据。
2. 相关工作综述
研究者/年份研究内容关键结论
Vergas(2022)Spark+Scala环境下,Iceberg vs Delta Lake/Hudi(云存储)Iceberg读速最优(比Hudi快20%、比Delta Lake快10-15%),但更新速度仅为Delta Lake的1/2
Ciesielski(2024)PySpark+Iceberg处理金融大数据Iceberg通过ACID事务和版本控制,降低数据访问时间,适合需数据完整性的场景
Ahmed(2020)Spark vs Hadoop(10节点集群,60TB存储,WordCount/TeraSort)Spark性能更优:WordCount快2倍,TeraSort快14倍(Scala实现,原生API兼容)
Ketu(2020)Spark vs Hadoop(迭代/流处理任务,多语言测试)Spark迭代任务快2-10倍(内存计算优势);Scala用于高性能场景,Python用于机器学习集成
3. 研究方法
(1)数据集详情
数据来源数据内容数据规模核心字段
simplemaps.com全球城市地理信息5MB CSV,47k条City、Lat(纬度)、Lng(经度)、Population、Country_iso2
open-meteo2024年全球小时气温数据1.6GB CSVDate(时间戳)、Temperature_2m、Lat、Lng
合并后数据城市-小时气温关联数据(ETL目标)-含气温、地理、人口、国家等综合字段
(2)实验环境配置
  • 硬件环境:Windows 10 Home(64位)、16GB RAM、AMD Ryzen 5 4600H(3.00GHz)、Radeon Graphics;JVM堆内存约3934MB,支持12核并行任务。
  • 软件环境
    • 框架:Apache Spark 3.5.1(分布式处理)、Apache Iceberg 1.7.1(分析型表管理)
    • 语言:Java 11.0.14、Scala 2.12.18、Python 3.11
    • 开发工具:PyCharm(Python)、IntelliJ IDEA(Java/Scala)
(3)统一Spark配置(保障实验公平性)
配置参数描述
master = local[*]本地多线程模式,利用所有可用CPU核心
spark.sql.catalog.local.typeIceberg目录类型:Hadoop(基于文件系统存储)
spark.executor.instances = 5启用5个executor(共6个执行单元)
spark.executor.cores = 2每个executor分配2个CPU核心
spark.driver.cores = 2Driver分配2个CPU核心
spark.sql.adaptive.enabled = true启用自适应查询执行(优化查询计划)
spark.memory.offHeap.enabled = true启用堆外内存,减少JVM垃圾回收开销
(4)ETL流程设计
  1. 提取阶段:Spark读取CSV文件,通过header=true识别表头、inferSchema=true自动推断数据类型(三种语言代码见表7)。
  2. 转换阶段
    • 数据清洗:dropDuplicates()移除重复项;to_date()转换时间格式。
    • 表关联:用join()基于Lat/Lng字段合并城市与天气数据,小数据集(城市数据)用broadcast()优化关联速度。
  3. 加载阶段:数据写入Iceberg表,采用overwrite模式(保留历史数据)+ overwrite-mode=dynamic(最小化重写批次),三种语言代码见表8。
4. 实验结果
(1)各语言执行时间对比(核心结果)
Apache Iceberg表名Java(秒)Scala(秒)Python(秒)性能排序
world_cities(小数据集)9.629.136.71Python > Scala > Java
weather_events(中数据集)50.5647.7246.34Python > Scala > Java
weather_hourly_events(复杂大数据集)379.8374.42398.32Scala > Java > Python
(2)Apache Iceberg存储结构
  • schema组织:按语言分3个独立目录(worldcities_java/scala/python),每个目录含3张表(weather_events、world_cities、weather_hourly_events)。
  • 分区策略
    • weather_hourly_events表:按temperature_dt(日期,一级分区)和country_iso2(国家ISO2,二级分区)分层,子目录嵌套存储(见图3、4)。
  • 文件格式
    • 数据文件:Parquet(列存格式,减少IO开销,支持压缩),每个分区目录下含.parquet数据文件和.parquet.crc校验文件(见图5)。
    • 元数据文件:metadata目录存储表schema、事务历史、版本信息,保障ACID特性。
5. 结论与未来方向
  • 核心结论
    1. 性能与数据集规模非线性相关:Python适合中小数据集(高-level API高效,JVM开销小);Scala适合复杂ETL(原生Spark语言,优化更充分,比Python快6%)。
    2. 语言执行特性影响性能:即使配置相同,JVM预热时间、垃圾回收、序列化效率仍导致执行时间差异。
  • 未来研究方向
    1. 扩展表格式对比:研究Delta Lake、Apache Hudi与Iceberg的性能差异。
    2. 云原生环境测试:验证不同集群规模、资源分配下的性能稳定性。
    3. 优化策略迭代:针对不同语言设计定制化Spark配置。

4. 关键问题

问题1:三种编程语言在Apache Spark处理不同规模数据集时的性能差异具体表现如何?造成差异的核心原因是什么?
  • 答案
    性能差异随数据集规模变化显著:① 小/中数据集(world_cities、weather_events):Python最快(6.71秒、46.34秒),优于Scala(9.13秒、47.72秒)和Java(9.62秒、50.56秒),原因是Python高-level API简洁,无需JVM启动预热, overhead更低;② 复杂大数据集(weather_hourly_events):Scala最优(374.42秒),优于Java(379.8秒)和Python(398.32秒),原因是Scala是Spark原生语言,支持低-level函数调用,与Catalyst优化器集成更紧密,且避免Python与JVM间的序列化开销(Py4J桥接损耗)。
问题2:本研究中Apache Iceberg的存储设计(如分区、文件格式)对ETL流程性能有哪些关键影响?
  • 答案
    Iceberg的存储设计从三方面优化ETL性能:① 分层分区策略:weather_hourly_events表按temperature_dt(日期)+ country_iso2(国家)分区,查询时仅读取目标分区数据(如特定日期+国家),减少IO量;② Parquet列存格式:数据按列存储,ETL转换中仅需加载目标字段(如气温、经纬度),比行存减少50%以上数据传输,且支持高效压缩(降低磁盘占用);③ ACID事务与动态覆盖:通过overwrite-mode=dynamic仅重写更新数据,避免全表重写,同时metadata目录记录版本历史,保障数据一致性,减少重试开销(尤其复杂关联任务)。
问题3:为确保实验结果的公平性与可复现性,本研究在实验环境和Spark配置上做了哪些关键控制?
  • 答案
    研究通过“硬件统一、软件版本固定、配置参数一致”保障公平性:① 硬件环境统一:固定使用Windows 10、16GB RAM、AMD Ryzen 5 4600H处理器,JVM堆内存3934MB,12核并行任务,避免硬件差异影响;② 软件版本固定:Spark 3.5.1、Iceberg 1.7.1、Java 11、Scala 2.12.18、Python 3.11,排除版本兼容性导致的性能波动;③ Spark参数一致:所有语言共享相同配置(如master=local[*]、5个executor、自适应查询启用、堆外内存开启),且ETL流程(读CSV、转换、写Iceberg)的逻辑完全一致(仅语言语法差异),确保性能差异仅源于语言特性。

总结

这篇论文没有讲复杂的理论,而是用 “接地气” 的实验解决了大数据开发的实际痛点 ——Spark 语言选型。它的价值不在于提出新算法,而在于用统一、可复现的实验,把 “经验之谈” 变成了 “数据结论”:小 / 中数据集选 Python(兼顾效率和性能),复杂大数据集选 Scala(性能最优),Java 可作为稳定备选。对于需要优化 Spark ETL 性能的开发者来说,这篇论文的结论直接能用,是一篇 “实用型” 的研究。

http://www.dtcms.com/a/532563.html

相关文章:

  • 算法--滑动窗口(一)
  • 新房网站建设公司永和建设集团有限公司网站
  • 【Rust编程:从新手到大师】Rust 环境搭建(详细版)
  • SQL188 每月及截止当月的答题情况
  • 珠海网站专业制作网站开发和运维区别
  • 数据格式 、序列化和反序列化
  • 【Rust编程:从新手到大师】第一个项目Hello,World
  • 【代码随想录算法训练营——Day48】单调栈——42.接雨水、84.柱状图中最大的矩形
  • 架构设计:银行核心系统
  • 手机网站建设推广网站策划书格式
  • Week 22: 深度学习补遗:Transformer+Encoder构建
  • Nacos,什么是Nacos,一文详解
  • 7. Qt 容器迭代器
  • 详解MySQL两种存储引擎MyISAM和InnoDB的优缺点
  • Python + uiautomator2 手机自动化控制教程
  • 黑龙江省城乡建设厅网站注册广告公司名字
  • 杨校老师课堂之C++备赛信奥中STL常用库函数梳理汇总(含样例代码)
  • UU远程深度测评:聚焦游戏与Windows多屏场景,免费实用的远程控制选择
  • week7
  • 【Python刷力扣hot100】15. 3Sum
  • MacOS平台Keil代替方案
  • 建设项目技术服务网站笋岗网站建设
  • 【AI原生架构:数据架构】10、从主数据治理到价值落地
  • jQuery JSONP详解
  • GitHub等平台形成的开源文化正在重塑和解
  • 网站首页包含的内容wordpress扩展class名称
  • MCoT在医疗AI工程化编程的实践手册(上)
  • 济南网站建设淄博外贸网站哪家好
  • 阮一峰《TypeScript 教程》学习笔记——类型工具
  • 怎样做钓鱼网站网站建设电话营销话术