Spark 2.4.0 版本发布

Apache Spark 2.4.0 是 2.x 系列中的第五个版本。该版本增加了屏障执行模式(Barrier Execution Mode),以便更好地与深度学习框架集成;引入了 30 多种内置和高阶函数,以更轻松地处理复杂数据类型;改进了 K8s 集成,并提供了对 Scala 2.12 的实验性支持。其他重大更新包括内置 Avro 数据源、图像数据源、灵活的流式接收器(streaming sinks)、消除了传输过程中 2GB 块大小的限制,以及 Pandas UDF 的改进。此外,该版本继续专注于易用性、稳定性和完善性,同时解决了约 1100 个问题。

要下载 Apache Spark 2.4.0,请访问 下载 页面。您可以查阅 JIRA 获取 详细变更。我们在此汇总了一份主要变更列表,按主要模块进行分组。

Core 和 Spark SQL

  • 主要特性
    • 屏障执行模式 (Barrier Execution Mode): [SPARK-24374] 在调度器中支持屏障执行模式,以更好地与深度学习框架集成。
    • Scala 2.12 支持: [SPARK-14220] 增加对 Scala 2.12 的实验性支持。现在,您可以使用 Scala 2.12 构建 Spark,并使用 Scala 2.12 编写 Spark 应用程序。
    • 高阶函数 (Higher-order functions): [SPARK-23899] 增加许多新的内置函数,包括高阶函数,以便更轻松地处理复杂数据类型。
    • 内置 Avro 数据源: [SPARK-24768] 将 Spark-Avro 包内联,支持逻辑类型,并具备更好的性能和易用性。
  • API
  • 性能和稳定性
    • [SPARK-16406] 大量列的引用解析速度应更快
    • [SPARK-23486] 缓存来自外部目录的函数名以进行 lookupFunctions
    • [SPARK-23803] 支持分桶裁剪 (Bucket Pruning)
    • [SPARK-24802] 优化规则排除 (Optimization Rule Exclusion)
    • [SPARK-4502] Parquet 表的嵌套模式裁剪
    • [SPARK-24296] 支持复制大于 2GB 的块
    • [SPARK-24307] 支持从内存发送超过 2GB 的消息
    • [SPARK-23243] 对 RDD 执行 Shuffle+Repartition 可能会导致错误结果
    • [SPARK-25181] 限制 BlockManager 主从线程池的大小,降低网络缓慢时的内存开销
  • 连接器
  • Kubernetes 调度后端
  • PySpark
    • [SPARK-24215] 为 DataFrame API 实现立即求值 (Eager Evaluation)
    • [SPARK-22274] 带 Pandas UDF 的用户自定义聚合函数
    • [SPARK-22239] 带 Pandas UDF 的用户自定义窗口函数
    • [SPARK-24396] 为 Python 添加 Structured Streaming ForeachWriter
    • [SPARK-23874] 将 Apache Arrow 升级到 0.10.0
    • [SPARK-25004] 添加 spark.executor.pyspark.memory 限制
    • [SPARK-23030] 使用 Arrow 流格式创建和收集 Pandas DataFrame
    • [SPARK-24624] 支持 Python UDF 和标量 Pandas UDF 混合使用
  • 其他重大变更

编程指南: Spark RDD 编程指南Spark SQL、DataFrame 和 Dataset 指南

Structured Streaming

  • 主要特性
    • [SPARK-24565] 使用 foreachBatch 将每个微批次的输出行作为 DataFrame 公开(Python、Scala 和 Java)
    • [SPARK-24396] 添加了用于 foreach 和 ForeachWriter 的 Python API
    • [SPARK-25005] 支持“kafka.isolation.level”,以仅从使用事务生产者编写的 Kafka 主题中读取已提交的记录。
  • 其他重大变更
    • [SPARK-24662] 支持追加或完成模式下流的 LIMIT 运算符
    • [SPARK-24763] 删除流聚合中值里的冗余键数据
    • [SPARK-24156] 当输入流中没有数据时,加快有状态操作(mapGroupsWithState, stream-stream join, 流聚合, 流 dropDuplicates)的输出结果生成和/或状态清理。
    • [SPARK-24730] 支持在查询中有多个输入流时选择最小或最大水印 (watermark)
    • [SPARK-25399] 修复了一个错误,即重用连续处理的执行线程进行微批处理可能导致正确性问题
    • [SPARK-18057] 将 Kafka 客户端版本从 0.10.0.1 升级到 2.0.0

编程指南: 结构化流 (Structured Streaming) 编程指南

MLlib

  • 主要特性
  • 其他重大变更
    • [SPARK-22119] 为 KMeans/BisectingKMeans/聚类评估器添加余弦距离度量
    • [SPARK-10697] 关联规则挖掘中的提升度 (Lift) 计算
    • [SPARK-14682] 为 spark.ml GBTs 提供 evaluateEachIteration 方法或等效方法
    • [SPARK-7132] 为 spark.ml GBT 添加带验证集的拟合 (fit)
    • [SPARK-15784] 为 spark.ml 添加幂迭代聚类 (Power Iteration Clustering)
    • [SPARK-15064] StopWordsRemover 中的区域设置支持
    • [SPARK-21741] 基于 DataFrame 的多变量汇总器的 Python API
    • [SPARK-21898] MLlib 中 KolmogorovSmirnovTest 的功能对等
    • [SPARK-10884] 支持对回归和分类相关模型进行单实例预测
    • [SPARK-23783] 为 ML 流水线添加新的通用导出特性 (trait)
    • [SPARK-11239] ML 线性回归的 PMML 导出

编程指南: 机器学习库 (MLlib) 指南

SparkR

  • 主要特性
    • [SPARK-25393] 添加新函数 from_csv()
    • [SPARK-21291] 在 DataFrame 中添加 R partitionBy API
    • [SPARK-25007] 为 SparkR 添加 array_intersect/array_except/array_union/shuffle
    • [SPARK-25234] 避免 parallelize 中的整数溢出
    • [SPARK-25117] 在 R 中添加 EXCEPT ALL 和 INTERSECT ALL 支持
    • [SPARK-24537] 添加 array_remove / array_zip / map_from_arrays / array_distinct
    • [SPARK-24187] 为 SparkR 添加 array_join 函数
    • [SPARK-24331] 为 SparkR 添加 arrays_overlap、array_repeat、map_entries
    • [SPARK-24198] 为 SparkR 添加 slice 函数
    • [SPARK-24197] 为 SparkR 添加 array_sort 函数
    • [SPARK-24185] 为 SparkR 添加 flatten 函数
    • [SPARK-24069] 添加 array_min / array_max 函数
    • [SPARK-24054] 添加 array_position 函数 / element_at 函数
    • [SPARK-23770] 为 SparkR 添加 repartitionByRange API

编程指南: SparkR (R on Spark)

GraphX

  • 主要特性
    • [SPARK-25268] 运行并行个性化 PageRank 抛出序列化异常

编程指南: GraphX 编程指南

弃用

行为变更

  • Spark Core
    • [SPARK-25088] Rest Server 默认设置及文档更新
  • Spark SQL
    • [SPARK-23549] 在时间戳与日期比较时强制转换为时间戳
    • [SPARK-24324] Pandas 分组映射 UDF 应按名称分配结果列
    • [SPARK-23425] 带有通配符的 HDFS 文件路径无法正常加载数据
    • [SPARK-23173] from_json 可能会为标记为非空 (non-nullable) 的字段生成 null
    • [SPARK-24966] 实现集合操作的优先级规则
    • [SPARK-25708] 不带 GROUP BY 的 HAVING 应作为全局聚合
    • [SPARK-24341] 正确处理多值 IN 子查询
    • [SPARK-19724] 使用现有默认位置创建托管表应抛出异常

请阅读 迁移指南 了解所有行为变更

已知问题

  • [SPARK-25271] 使用 Hive Parquet 表的 CTAS 应利用原生 Parquet 源
  • [SPARK-24935] 从 Spark 2.2 开始执行 Hive UDAF 的问题
  • [SPARK-25879] 当同时选择嵌套字段和顶层字段时,模式裁剪失败
  • [SPARK-25906] spark-shell 无法正确处理 -i 选项
  • [SPARK-25921] Python 工作进程重用导致屏障任务在没有 BarrierTaskContext 的情况下运行
  • [SPARK-25918] LOAD DATA LOCAL INPATH 应处理相对路径

致谢

最后但同样重要的是,如果没有以下贡献者,这个版本是不可能实现的:Achuth17, Adam Bradbury, Adamyuanyuan, Adelbert Chang, Ala Luszczak, Aleksandr Koriagin, Alessandro Bellina, Alessandro Solimando, Andrew Korzhuev, Anton Okolnychyi, Antonio Murgia, Arseniy Tashoyan, Artem Rudoy, Arun Mahadevan, Asher Saban, Bago Amirbekian, Benjamin Peterson, Bo Meng, Bogdan Raducanu, Bounkong Khamphousone, Brandon Krieger, Brian Lindblom, Bruce Robbins, Bryan Cutler, Cheng Lian, Chongguang LIU, Chris Horn, Chris Martin, Cody Koeninger, DB Tsai, Daniel Sakuma, Daniel Van Der Ende, Darcy Shen, David Vogelbacher, Devaraj K, Dhruve Ashar, Dilip Biswal, Dongjoon Hyun, DylanGuedes, Efim Poberezkin, Eric Chang, Eric Liang, Erik Erlandson, Eyal Farago, Fangshi Li, Felix Cheung, Feng Liu, Fernando Pereira, Florent Pepin, Fokko Driesprong, Gabor Somogyi, Gengliang Wang, Ger Van Rossum, Gera Shegalov, Goun Na, Hao Ren, Henry Robinson, Herman Van Hovell, Hieu Huynh, Holden Karau, Huang Tengfei, Huaxin Gao, Hyukjin Kwon, Ilan Filonenko, Imran Rashid, Jacek Laskowski, Jake Charland, James Thompson, James Yu, Jaroslav Chladek, Jeff Zhang, JiahuiJiang, Jim Kleckner, Joey Krabacher, John Zhuge, Jongyoul Lee, Jooseong Kim, Jose Torres, Joseph Bradley, Joseph K. Bradley, Josh Rosen, Julien Cuquemelle, Juliusz Sompolski, Jungtaek Lim, KaiXinXIaoLei, Kallman, Steven, Karthik Palaniappan, Kaya Kupferschmidt, Kazuaki Ishizaki, Kelley Robinson, Kent Yao, Kevin Yu, KevinZwx, Koert Kuipers, Kousuke Saruta, Kris Mok, LantaoJin, Lee Dongjin, Lemonjing, Li Jin, Liang-Chi Hsieh, Lu WANG, LucaCanali, Marcelo Vanzin, Marco Gaido, Marek Novotny, Mario Molina, Mark Petruska, Maryann Xue, Mathieu St-Louis, Matthew Cheah, Matthew Tovbin, Mauro Palsgraaf, Maxim Gekk, Michael (Stu) Stewart, Michael Allman, Michael Chirico, Michael Mior, Michal Switakowski, Mihaly Toth, Miklos C, Miles Yucht, Misha Dmitriev, Mukul Murthy, Mykhailo Shtelma, Neal Song, Ngone51, Nihar Sheth, Nolan Emirot, Norman Maurer, Onur Satici, Patrick McGloin, Patrick Pisciuneri, Paul Mackles, Peter Toth, Prashant Sharma, Rao Fu, Ray Burgemeestre, Rekha Joshi, Reynold Xin, Reza Safi, Ricardo Martinelli De Oliveira, Rob Vesse, Robert Kruszewski, Rong Tang, Ryan Blue, Sahil Takiar, Saisai Shao, Sandeep Singh, Sandor Murakozi, Sanket Chintapalli, Santiago Saavedra, Sean Owen, Sean Suchter, Sebastian Arzt, Shane Knapp, Shixiong Zhu, Soham Aurangabadkar, Stacy Kerkela, Stan Zhai, Stavros Kontopoulos, Steve Loughran, Sunitha Kambhampati, Takeshi Yamamuro, Takuya UESHIN, Tathagata Das, Ted Yu, Teng Peng, Thiruvasakan Paramasivan, Thomas Graves, Tom Saleeba, Vayda, Oleksandr: IT (PRG), Vinod KC, Vladimir Kuriatkov, Wang Gengliang, Weichen Xu, Wenbo Zhao, Wenchen Fan, William Sheu, XD-DENG, Xiangrui Meng, Xianjin YE, Xianyang Liu, Xiao Li, Xiaogang Tu, Xiayun Sun, Xingbo Jiang, Yacine Mazari, Yash Sharma, Ye Zhou, Yinan Li, Yogesh Garg, Yuanbo Liu, Yuanjian Li, Yuchen Huo, Yuexin Zhang, Yuming Wang, Yuval Itzchakov, Zhan Zhang, Zhang Le, Zheng RuiFeng, Zoltan C. Toth


Spark 新闻存档