Spark 发布 2.4.0

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

要下载 Apache Spark 2.4.0,请访问下载页面。您可以查阅 JIRA 以获取详细更改。我们在此处整理了一份高级别更改列表,按主要模块分组。

Core 和 Spark SQL

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

编程指南:Spark RDD 编程指南Spark SQL、DataFrames 和 Datasets 指南

结构化流

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

编程指南:结构化流编程指南

MLlib

  • 主要特性
  • 其他值得注意的更改
    • [SPARK-22119] 为 KMeans/BisectingKMeans/Clustering 评估器添加余弦距离度量
    • [SPARK-10697] 关联规则挖掘中的提升度计算
    • [SPARK-14682] 为 spark.ml GBTs 提供 evaluateEachIteration 方法或等效方法
    • [SPARK-7132] 为 spark.ml GBT 添加带验证集的 fit 方法
    • [SPARK-15784] 为 spark.ml 添加幂迭代聚类
    • [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] 将 array_intersect/array_except/array_union/shuffle 添加到 SparkR
    • [SPARK-25234] 避免 parallelize 中的整数溢出
    • [SPARK-25117] 在 R 中添加 EXCEPT ALL 和 INTERSECT ALL 支持
    • [SPARK-24537] 添加 array_remove / array_zip / map_from_arrays / array_distinct
    • [SPARK-24187] 将 array_join 函数添加到 SparkR
    • [SPARK-24331] 将 arrays_overlap, array_repeat, map_entries 添加到 SparkR
    • [SPARK-24198] 将 slice 函数添加到 SparkR
    • [SPARK-24197] 将 array_sort 函数添加到 SparkR
    • [SPARK-24185] 将 flatten 函数添加到 SparkR
    • [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 Grouped Map UDF 应按名称分配结果列
    • [SPARK-23425] 使用通配符加载 hdfs 文件路径数据无法正常工作
    • [SPARK-23173] from_json 可以为标记为非空字段生成空值
    • [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 新闻档案