Spark 2.3.0 版本发布

Apache Spark 2.3.0 是 2.x 系列的第四个版本。此版本在结构化流式处理中增加了持续处理支持,以及全新的 Kubernetes 调度器后端。其他主要更新包括新的 DataSource 和 Structured Streaming v2 API,以及多项 PySpark 性能增强。此外,此版本继续关注可用性、稳定性和完善性,同时解决了大约 1400 个问题。

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

核心、PySpark 和 Spark SQL

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

结构化流式处理

  • 持续处理
    • 一个新执行引擎,只需更改一行用户代码,即可实现亚毫秒级的端到端流查询延迟。有关更多信息,请参阅编程指南。
  • 流-流连接
    • 能够连接两个数据流,缓冲行直到匹配的元组出现在另一个流中。谓词可用于事件时间列,以限制需要保留的状态量。
  • 流 API V2
    • 一个实验性 API,用于插入新的源和槽,适用于批处理、微批处理和持续执行。请注意,此 API 仍在积极开发中,可能会有破坏性变更。

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

MLlib

  • 亮点
    • ML 预测现在支持结构化流式处理,使用更新后的 API。详情见下文。
  • 新增/改进的 API
    • [SPARK-21866]: 内置支持将图像读取到 DataFrame (Scala/Java/Python)
    • [SPARK-19634]: 用于向量列描述性统计的 DataFrame 函数 (Scala/Java)
    • [SPARK-14516]: ClusteringEvaluator 用于调优聚类算法,支持余弦轮廓系数和欧几里得平方轮廓系数指标 (Scala/Java/Python)
    • [SPARK-3181]: 具有 Huber 损失的鲁棒线性回归 (Scala/Java/Python)
    • [SPARK-13969]: FeatureHasher 转换器 (Scala/Java/Python)
    • 多个特征转换器的多列支持
    • [SPARK-21633] 和 SPARK-21542]: 改进了对 Python 中自定义管道组件的支持。
  • 新功能
    • [SPARK-21087]: CrossValidatorTrainValidationSplit 可以在拟合时收集所有模型 (Scala/Java)。这允许您检查或保存所有已拟合的模型。
    • [SPARK-19357]: 元算法 CrossValidatorTrainValidationSplitOneVsRest 支持并行参数,用于在并行 Spark 作业中拟合多个子模型
    • [SPARK-17139]: 多项逻辑回归的模型摘要 (Scala/Java/Python)
    • [SPARK-18710]: 在 GLM 中添加偏移量
    • [SPARK-20199]: 为 GBTClassifierGBTRegressor 添加了 featureSubsetStrategy 参数。使用此参数对特征进行二次采样可以显著提高训练速度;此选项一直是 xgboost 的一个关键优势。
  • 其他值得注意的更改
    • [SPARK-22156] 修复了 Word2Vec 学习率随迭代次数缩放的问题。新的学习率已设置为与原始 Word2Vec C 代码匹配,应能提供更好的训练结果。
    • [SPARK-22289] 为矩阵参数添加了 JSON 支持(这修复了在使用系数边界时 LogisticRegressionModel 的 ML 持久化 bug。)
    • [SPARK-22700] Bucketizer.transform 错误地丢弃了包含 NaN 的行。当参数 handleInvalid 设置为“skip”时,如果另一个(不相关的)列具有 NaN 值,Bucketizer 将丢弃输入列中具有有效值的行。
    • [SPARK-22446] 当 handleInvalid 设置为“error”时,Catalyst 优化器有时会导致 StringIndexerModel 抛出不正确的“Unseen label”异常。这可能发生在过滤后的数据上,由于谓词下推,即使无效行已从输入数据集中过滤掉,也会导致错误。
    • [SPARK-21681] 修复了多项逻辑回归中的一个边缘情况 bug,该 bug 在某些特征方差为零时导致系数不正确。
    • 主要优化
      • [SPARK-22707] 减少了 CrossValidator 的内存消耗
      • [SPARK-22949] 减少了 TrainValidationSplit 的内存消耗
      • [SPARK-21690] Imputer 应该在一次数据遍历中进行训练
      • [SPARK-14371] OnlineLDAOptimizer 避免为每个 mini-batch 将统计数据收集到驱动器。

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

SparkR

SparkR 在 2.3.0 版本发布中的主要重点是提高 UDF 的稳定性,并在现有 API 周围添加了几个新的 SparkR 包装器

编程指南:SparkR (R on Spark)

GraphX

  • 优化
    • [SPARK-5484] Pregel 现在定期检查点以避免 StackOverflowErrors
    • [SPARK-21491] 几个地方的小幅性能改进

编程指南:GraphX 编程指南

弃用

  • Python
    • [SPARK-23122] 弃用 PySpark 中 SQLContextCatalog 中 UDF 的 register* 方法
  • MLlib
    • [SPARK-13030] OneHotEncoder 已被弃用,并将在 3.0 版本中移除。它已被新的 OneHotEncoderEstimator 取代。请注意,OneHotEncoderEstimator 将在 3.0 版本中重命名为 OneHotEncoder (但 OneHotEncoderEstimator 将保留作为别名)。

行为变更

  • SparkSQL
    • [SPARK-22036]: 默认情况下,如果无法精确表示,十进制数之间的算术运算将返回一个四舍五入的值(而不是像先前版本那样返回NULL
    • [SPARK-22937]: 当所有输入都是二进制时,SQL elt() 返回二进制输出。否则,它返回字符串。在先前版本中,无论输入类型如何,它总是返回字符串。
    • [SPARK-22895]: 如果可能,位于第一个非确定性谓词之后的 Join/Filter 的确定性谓词也会被下推/穿透到子操作符。在先前版本中,这些过滤器不符合谓词下推的条件。
    • [SPARK-22771]: 当所有输入都是二进制时,functions.concat() 返回二进制输出。否则,它返回字符串。在先前版本中,无论输入类型如何,它总是返回字符串。
    • [SPARK-22489]: 当任一连接侧可广播时,我们倾向于广播在广播提示中明确指定的表。
    • [SPARK-22165]: 分区列推断以前为不同的推断类型找到了不正确的公共类型,例如,它以前将 double 类型和 date 类型的公共类型推断为 double 类型。现在它为这种冲突找到了正确的公共类型。有关详细信息,请参阅迁移指南
    • [SPARK-22100]: percentile_approx 函数以前接受 numeric 类型输入并输出 double 类型结果。现在它支持 date 类型、timestamp 类型和 numeric 类型作为输入类型。结果类型也更改为与输入类型相同,这对于百分位数来说更合理。
    • [SPARK-21610]: 当引用的列仅包含内部损坏记录列(默认为 _corrupt_record)时,不允许从原始 JSON/CSV 文件进行查询。相反,您可以缓存或保存解析结果,然后发送相同的查询。
    • [SPARK-23421]: 自 Spark 2.2.1 和 2.3.0 以来,当数据源表中的列同时存在于分区模式和数据模式中时,模式总是在运行时推断。推断出的模式不包含分区列。读取表时,Spark 遵循这些重叠列的分区值,而不是数据源文件中存储的值。在 2.2.0 和 2.1.x 版本中,推断出的模式是分区的,但表的数据对用户不可见(即结果集为空)。
  • PySpark
    • [SPARK-19732]: na.fill()fillna 也接受布尔值并用布尔值替换 null。在先前的 Spark 版本中,PySpark 只是忽略它并返回原始 Dataset/DataFrame。
    • [SPARK-22395]: 使用 Pandas 相关功能,例如 toPandas、从 Pandas DataFrame 创建 createDataFrame 等,需要 Pandas 0.19.2 或更高版本。
    • [SPARK-22395]: Pandas 相关功能的时间戳值行为已更改为遵循会话时区,这在先前版本中被忽略。
    • [SPARK-23328]: 当 to_replace 不是字典时,df.replace 不允许省略 value。以前,value 在其他情况下可以省略,默认值为 None,这反直觉且容易出错。
  • MLlib
    • 破坏性 API 更改:逻辑回归模型摘要的类和特质层次结构已更改为更清晰,并更好地适应多类摘要的添加。对于将 LogisticRegressionTrainingSummary 强制转换为 BinaryLogisticRegressionTrainingSummary 的用户代码来说,这是一个破坏性更改。用户应改为使用 model.binarySummary 方法。有关更多详细信息,请参阅 [SPARK-17139](请注意,这是一个 @Experimental API)。这不影响 Python 摘要方法,它在多项式和二元情况下仍能正常工作。
    • [SPARK-21806]: BinaryClassificationMetrics.pr(): 第一个点 (0.0, 1.0) 具有误导性,已被 (0.0, p) 取代,其中精度 p 与最低召回点匹配。
    • [SPARK-16957]: 决策树现在在选择分裂值时使用加权中点。这可能会改变模型训练的结果。
    • [SPARK-14657]: RFormula 在没有截距的情况下,在编码字符串项时现在输出参考类别,以匹配原生 R 行为。这可能会改变模型训练的结果。
    • [SPARK-21027]: OneVsRest 中使用的默认并行度现在设置为 1(即串行)。在 2.2 及更早版本中,并行度级别设置为 Scala 中的默认线程池大小。这可能会改变性能。
    • [SPARK-21523]: Breeze 升级到 0.13.2。这包括 L-BFGS 强 Wolfe 线搜索中的一个重要错误修复。
    • [SPARK-15526]: JPMML 依赖项现在已进行混淆处理。
    • 另请参阅“错误修复”部分,了解因修复错误而导致的行为更改。

已知问题

  • [SPARK-23523][SQL] 规则 OptimizeMetadataOnlyQuery 导致的不正确结果
  • [SPARK-23406] 流-流自连接中的错误

致谢

最后但同样重要的是,没有以下贡献者的努力,此版本是不可能实现的:ALeksander Eskilson, Adrian Ionescu, Ajay Saini, Ala Luszczak, Albert Jang, Alberto Rodriguez De Lema, Alex Mikhailau, Alexander Istomin, Anderson Osagie, Andrea Zito, Andrew Ash, Andrew Korzhuev, Andrew Ray, Anirudh Ramanathan, Anton Okolnychyi, Arman Yazdani, Armin Braun, Arseniy Tashoyan, Arthur Rand, Atallah Hezbor, Attila Zsolt Piros, Ayush Singh, Bago Amirbekian, Ben Barnard, Bo Meng, Bo Xu, Bogdan Raducanu, Brad Kaiser, Bravo Zhang, Bruce Robbins, Bruce Xu, Bryan Cutler, Burak Yavuz, Carson Wang, Chang Chen, Charles Chen, Cheng Wang, Chenjun Zou, Chenzhao Guo, Chetan Khatri, Chie Hayashida, Chin Han Yu, Chunsheng Ji, Corey Woodfield, Daniel Li, Daniel Van Der Ende, Devaraj K, Dhruve Ashar, Dilip Biswal, Dmitry Parfenchik, Donghui Xu, Dongjoon Hyun, Eren Avsarogullari, Eric Vandenberg, Erik LaBianca, Eyal Farago, Favio Vazquez, Felix Cheung, Feng Liu, Feng Zhu, Fernando Pereira, Fokko Driesprong, Gabor Somogyi, Gene Pang, Gera Shegalov, German Schiavon, Glen Takahashi, Greg Owen, Grzegorz Slowikowski, Guilherme Berger, Guillaume Dardelet, Guo Xiao Long, He Qiao, Henry Robinson, Herman Van Hovell, Hideaki Tanaka, Holden Karau, Huang Tengfei, Huaxin Gao, Hyukjin Kwon, Ilya Matiach, Imran Rashid, Iurii Antykhovych, Ivan Sadikov, Jacek Laskowski, JackYangzg, Jakub Dubovsky, Jakub Nowacki, James Thompson, Jan Vrsovsky, Jane Wang, Jannik Arndt, Jason Taaffe, Jeff Zhang, Jen-Ming Chung, Jia Li, Jia-Xuan Liu, Jin Xing, Jinhua Fu, Jirka Kremser, Joachim Hereth, John Compitello, John Lee, John O’Leary, Jorge Machado, Jose Torres, Joseph K. Bradley, Josh Rosen, Juliusz Sompolski, Kalvin Chau, Kazuaki Ishizaki, Kent Yao, Kento NOZAWA, Kevin Yu, Kirby Linvill, Kohki Nishio, Kousuke Saruta, Kris Mok, Krishna Pandey, Kyle Kelley, Li Jin, Li Yichao, Li Yuanjian, Liang-Chi Hsieh, Lijia Liu, Liu Shaohui, Liu Xian, Liyun Zhang, Louis Lyu, Lubo Zhang, Luca Canali, Maciej Brynski, Maciej Szymkiewicz, Madhukara Phatak, Mahmut CAVDAR, Marcelo Vanzin, Marco Gaido, Marcos P, Marcos P. Sanchez, Mark Petruska, Maryann Xue, Masha Basmanova, Miao Wang, Michael Allman, Michael Armbrust, Michael Gummelt, Michael Mior, Michael Patterson, Michael Styles, Michal Senkyr, Mikhail Sveshnikov, Min Shen, Ming Jiang, Mingjie Tang, Mridul Muralidharan, Nan Zhu, Nathan Kronenfeld, Neil Alexander McQuarrie, Ngone51, Nicholas Chammas, Nick Pentreath, Ohad Raviv, Oleg Danilov, Onur Satici, PJ Fanning, Parth Gandhi, Patrick Woody, Paul Mackles, Peng Meng, Peng Xiao, Pengcheng Liu, Peter Szalai, Pralabh Kumar, Prashant Sharma, Rekha Joshi, Remis Haroon, Reynold Xin, Reza Safi, Riccardo Corbella, Rishabh Bhardwaj, Robert Kruszewski, Ron Hu, Ruben Berenguel Montoro, Ruben Janssen, Rui Zha, Rui Zhan, Ruifeng Zheng, Russell Spitzer, Ryan Blue, Sahil Takiar, Saisai Shao, Sameer Agarwal, Sandor Murakozi, Sanket Chintapalli, Santiago Saavedra, Sathiya Kumar, Sean Owen, Sergei Lebedev, Sergey Serebryakov, Sergey Zhemzhitsky, Seth Hendrickson, Shane Jarvie, Shashwat Anand, Shintaro Murakami, Shivaram Venkataraman, Shixiong Zhu, Shuangshuang Wang, Sid Murching, Sital Kedia, Soonmok Kwon, Srinivasa Reddy Vundela, Stavros Kontopoulos, Steve Loughran, Steven Rand, Sujith, Sujith Jay Nair, Sumedh Wale, Sunitha Kambhampati, Suresh Thalamati, Susan X. Huynh, Takeshi Yamamuro, Takuya UESHIN, Tathagata Das, Tejas Patil, Teng Peng, Thomas Graves, Tim Van Wassenhove, Travis Hegner, Tristan Stevens, Tucker Beck, Valeriy Avanesov, Vinitha Gankidi, Vinod KC, Wang Gengliang, Wayne Zhang, Weichen Xu, Wenchen Fan, Wieland Hoffmann, Wil Selwood, Wing Yew Poon, Xiang Gao, Xianjin YE, Xianyang Liu, Xiao Li, Xiaochen Ouyang, Xiaofeng Lin, Xiaokai Zhao, Xiayun Sun, Xin Lu, Xin Ren, Xingbo Jiang, Yan Facai (Yan Fa Cai), Yan Kit Li, Yanbo Liang, Yash Sharma, Yinan Li, Yong Tang, Youngbin Kim, Yuanjian Li, Yucai Yu, Yuhai Cen, Yuhao Yang, Yuming Wang, Yuval Itzchakov, Zhan Zhang, Zhang A Peng, Zhaokun Liu, Zheng RuiFeng, Zhenhua Wang, Zuo Tingbing, brandonJY, caneGuy, cxzl25, djvulee, eatoncys, heary-cao, ho3rexqj, lizhaoch, maclockard, neoremind, peay, shaofei007, wangjiaochun, zenglinxi0615


Spark 新闻存档