Spark 2.3.0 版本

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

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

Core, 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-13030]:OneHotEncoderEstimator(Scala/Java/Python)
      • [SPARK-22397]:QuantileDiscretizer(Scala/Java)
      • [SPARK-20542]:Bucketizer(Scala/Java/Python)
    • [SPARK-21633] 和 SPARK-21542]:改进了 Python 中对自定义管道组件的支持。
  • 新功能
    • [SPARK-21087]:CrossValidatorTrainValidationSplit 可以在拟合时收集所有模型(Scala/Java)。 这允许您检查或保存所有拟合模型。
    • [SPARK-19357]:元算法 CrossValidatorTrainValidationSplit, OneVsRest` 支持 parallelism Param,用于并行 Spark 作业中拟合多个子模型
    • [SPARK-17139]:多项式逻辑回归的模型摘要(Scala/Java/Python)
    • [SPARK-18710]:在 GLM 中添加偏移量
    • [SPARK-20199]:将 featureSubsetStrategy Param 添加到 GBTClassifierGBTRegressor。 使用它来对特征进行二次采样可以显着提高训练速度; 此选项一直是xgboost 的关键优势。
  • 其他值得注意的更改
    • [SPARK-22156] 修复了 Word2Vec 学习率随 num 迭代的缩放。 新的学习率设置为匹配原始 Word2Vec C 代码,并应从训练中获得更好的结果。
    • [SPARK-22289] 为矩阵参数添加 JSON 支持(这修复了使用系数边界时 LogisticRegressionModel 的 ML 持久性错误。)
    • [SPARK-22700] Bucketizer.transform 错误地删除包含 NaN 的行。 当 Param handleInvalid 设置为“skip”时,如果另一个(无关的)列具有 NaN 值,则 Bucketizer 将删除输入列中具有有效值的行。
    • [SPARK-22446] Catalyst 优化器有时会导致 StringIndexerModelhandleInvalid 设置为“error”时抛出不正确的“Unseen label”异常。 由于谓词下推,这可能发生在过滤数据上,即使在已从输入数据集中过滤掉无效行之后也会导致错误。
    • [SPARK-21681] 修复了多项逻辑回归中的一个边缘情况错误,该错误会导致某些特征具有零方差时产生不正确的系数。
    • 主要优化
      • [SPARK-22707] 减少了 CrossValidator 的内存消耗
      • [SPARK-22949] 减少了 TrainValidationSplit 的内存消耗
      • [SPARK-21690] Imputer 应该使用单次数据传递进行训练
      • [SPARK-14371] OnlineLDAOptimizer 避免为每个小批量收集统计信息到驱动程序。

编程指南:机器学习库 (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 类型作为 double 类型和 date 类型的公共类型结束。 现在,它可以为这些冲突找到正确的公共类型。 有关详细信息,请参见迁移指南
    • [SPARK-22100]: percentile_approx 函数先前接受 numeric 类型输入并输出 double 类型结果。 现在,它支持 date 类型、timestamp 类型和 numeric 类型作为输入类型。 结果类型也更改为与输入类型相同,这对于百分位数来说更合理。
    • [SPARK-21610]: 当引用的列仅包括内部损坏的记录列(默认情况下命名为 _corrupt_record)时,不允许从原始 JSON/CSV 文件进行查询。 相反,您可以缓存或保存已解析的结果,然后发送相同的查询。
    • [SPARK-23421]: 自 Spark 2.2.1 和 2.3.0 以来,当数据源表具有同时存在于分区 schema 和数据 schema 中的列时,始终在运行时推断 schema。 推断的 schema 没有分区列。 读取表时,Spark 会遵守这些重叠列的分区值,而不是存储在数据源文件中的值。 在 2.2.0 和 2.1.x 版本中,推断的 schema 是分区的,但是表的数据对用户不可见(即,结果集为空)。
  • PySpark
    • [SPARK-19732]: na.fill()fillna 也接受布尔值,并将空值替换为布尔值。 在以前的 Spark 版本中,PySpark 只是忽略它并返回原始的 Dataset/DataFrame。
    • [SPARK-22395]: 对于使用 Pandas 相关功能(例如 toPandas,从 Pandas DataFrame 创建 createDataFrame 等),需要 Pandas 0.19.2 或更高版本。
    • [SPARK-22395]: Pandas 相关功能的 timestamp 值的行为已更改为遵循会话时区,而在以前的版本中已忽略该时区。
    • [SPARK-23328]: 当 to_replace 不是字典时,df.replace 不允许省略 value。 以前,可以在其他情况下省略 value,并且默认情况下为 None,这不直观且容易出错。
  • MLlib
    • Breaking API Changes: 对逻辑回归模型摘要的类和 trait 层次结构进行了更改,使其更简洁,并且更好地适应了多类摘要的添加。 对于将 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]: 为了匹配本机 R 行为,没有截距的 RFormula 现在在编码字符串项时输出参考类别。 这可能会更改模型训练的结果。
    • [SPARK-21027]: OneVsRest 中使用的默认并行度现在设置为 1(即,串行)。 在 2.2 和更早版本中,并行度设置为 Scala 中的默认线程池大小。 这可能会改变性能。
    • [SPARK-21523]: 将 Breeze 升级到 0.13.2。 其中包括 L-BFGS 强 Wolfe 线搜索中的一个重要的错误修复。
    • [SPARK-15526]: JPMML 依赖项现在已进行了阴影处理。
    • 另请参阅“Bug修复”部分,以了解因修复Bug而导致的更改。

已知问题

  • [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 新闻存档