Spark Release 2.3.0 版本发布新特性和优化

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

要下载Apache Spark 2.3.0,请访问下载页面。你可以咨询JIRA的详细变化。我们在这里策划了一个高层次的变更清单,按主要模块分组。

  • Core, PySpark and Spark SQL
  • Structured Streaming
  • MLlib
  • SparkR
  • GraphX
  • Deprecations
  • Changes of behavior
  • Known Issues
  • Credits

Core,PySpark和Spark SQL

  • 主要特点
    • Spark on Kubernetes:[ SPARK-18278 ]一个新的kubernetes调度程序后端,支持将原生作业提交到由kubernetes管理的集群。请注意,此支持目前是实验性的,并且应该预期配置,容器图像和入口点的行为变化。
    • Vectorized ORC Reader:[ SPARK-16060 ]增加对新ORC读取器的支持,通过矢量化(2-5x)显着提高ORC扫描吞吐量。为了启用读者,用户可以设置spark.sql.orc.impl为native。
    • Spark historyServer V2:[ SPARK-18085 ]一个新的Spark历史记录服务器(SHS)后端,通过更高效的事件存储机制为大规模应用程序提供更好的可伸缩性。
    • Datasource API V2:[ SPARK-15689 ] [ SPARK-22386 ]用于在Spark中插入新数据源的实验性API。新的API试图解决V1 API的几个限制,旨在促进开发高性能,易于维护和可扩展的外部数据源。请注意,此API仍处于积极的发展阶段,应该预料会发生重大变化。
    • PySpark性能增强:[ SPARK-22216 ] [ SPARK-21187 ]通过快速数据序列化和矢量化执行,python性能和互操作性显着提高。
  • 性能和稳定性
    • SPARK-21975 ]基于成本优化器的直方图支持
    • SPARK-20331 ]更好地支持Hive分区修剪的谓词下推
    • SPARK-19112 ]支持ZStandard压缩编解码器
    • SPARK-21113 ]支持读输入流,以在溢出阅读器中分摊磁盘I / O成本
    • SPARK-22510 ] [ SPARK-22692 ] [ SPARK-21871 ]进一步稳定codegen框架以避免64KB在Java方法和Java编译器常量池限制上遇到JVM字节码限制
    • SPARK-23207 ]修复了Spark中一个长期存在的问题,在某些手术病例中,DataFrame上的连续洗牌+重新分区可能会导致错误的答案
    • SPARK-22062 ] [ SPARK-17788 ] [ SPARK-21907 ]修复OOM的各种原因
    • Spark22489 ] [ Spark22916 ] [ Spark22895 ] [ Spark20758 ] [ Spark22266 ] [ Spark19122 ] [ Spark22662 ] [ Spark21652 ]在基于规则的优化和规划器增强
  • 其他显着变化
    • SPARK-20236 ]支持Hive风格的动态分区覆盖语义。
    • SPARK-4131 ]支持INSERT OVERWRITE DIRECTORY从查询直接将数据写入文件系统
    • SPARK-19285 ] [ SPARK-22945 ] [ SPARK-21499 ] [ SPARK-20586 ] [ SPARK-20416 ] [ SPARK-20668 ] UDF增强
    • Spark20463 ] [ Spark19951 ] [ Spark22934 ] [ Spark21055 ] [ Spark17729 ] [ Spark20962 ] [ Spark20963 ] [ Spark20841 ] [ Spark17642] [ Spark22475 ] [ SPARK-22934 ]改进了ANSI SQL合规性和Hive兼容性
    • SPARK-20746 ]更全面的SQL内置函数
    • SPARK-21485 ]为内置函数生成Spark SQL文档
    • SPARK-19810 ]取消对Scala的支持2.10
    • SPARK-22324 ]将箭头升级至0.8.0Netty至4.1.17

编程指南:Spark RDD编程指南Spark SQLDataFramesDatasetsGuide

Structured Streaming

  • 连续处理
    • 一种新的执行引擎,可以通过更改仅一行用户代码,以亚毫秒端到端延迟执行流式查询。要了解更多信息,请参阅编程指南。
  • 流 - 流联接
    • 能够加入两个数据流,缓冲行直到匹配的元组到达另一个流。可以使用谓词对事件时间列来限制需要保留的状态量。
  • 流媒体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-13​​969 ]:FeatureHasher变压器(Scala / Java / Python)
    • 多个特征转换器的多列支持:
      • SPARK-13​​030 ]:(OneHotEncoderEstimatorScala / Java / Python)
      • SPARK-22397 ]:(QuantileDiscretizerScala / Java)
      • SPARK-20542 ]:(BucketizerScala / Java / Python)
    • SPARK-21633 ]和SPARK-21542 ]:改进了对Python中自定义管道组件的支持。
  • 新功能
    • SPARK-21087 ]:CrossValidator并且TrainValidationSplit可以在装配时收集所有模型(Scala / Java)。这允许您检查或保存所有拟合的模型。
    • SPARK-19357 ]:元算法CrossValidator,TrainValidationSplit, OneVsRest支持并行性参数,用于并行拟合多个子模型Spark作业
    • SPARK-17139 ]:多项逻辑回归模型总结(Scala / Java / Python)
    • SPARK-18710 ]:在GLM中添加偏移量
    • SPARK-20199 ]:将featureSubsetStrategyParam 添加到GBTClassifier和GBTRegressor。使用这个子样本特征可以显着提高训练速度; 这个选项一直是一个关键的力量xgboost。
  • 其他显着变化
    • SPARK-22156 ] Word2Vec通过num迭代固定学习速率缩放。新的学习速率被设置为匹配原始的Word2VecC代码,并应该从培训中获得更好的结果。
    • SPARK-22289 ]添加JSON对矩阵参数的支持(修正了LogisticRegressionModel使用系数边界时ML持久性的错误。)
    • SPARK-22700 ] Bucketizer.transform不正确地删除包含的行NaN。当Param handleInvalid设置为“跳过”时,Bucketizer如果另一个(不相关的)列有NaN值,则会在输入列中删除具有有效值的行。
    • SPARK-22446 ]催化剂优化器StringIndexerModel在handleInvalid被设置为“错误”时有时会引发不正确的“不可见标签”异常。由于谓词下推,过滤数据可能会发生这种情况,即使已经过滤了无效行来自输入数据集。
    • SPARK-21681 ]修复了多项逻辑回归中的边缘病例错误,当某些特征具有零方差时导致系数不正确。
    • 主要优化:
      • SPARK-22707 ]降低了内存消耗CrossValidator
      • SPARK-22949 ]降低了内存消耗TrainValidationSplit
      • SPARK-21690 ] Imputer应该对数据进行一次遍历
      • SPARK-14371 ] OnlineLDAOptimizer避免为每个小批量的驱动程序收集统计数据。

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

SparkR

SparkR在2.3.0版本中的主要重点是提高UDF的稳定性并在现有的API上添加几个新的SparkR包装器:

  • 主要特点
    • SQL和R之间功能奇偶性的改进
    • Spark22933 ]:结构化流的API withWatermark,trigger,partitionBy和流流加入
    • SPARK-21266 ]:支持DDL格式模式的SparkR UDF
    • SPARK-20726 ] [ SPARK-22924 ] [ SPARK-22843 ]几个新的Dataframe API包装器
    • SPARK-15767 ] [ SPARK-21622 ] [ SPARK-20917 ] [ SPARK-20307 ] [ SPARK-20906 ]几个新的SparkML API包装器

编程指南:SparkRR on Spark

GraphX

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

编程指南:GraphX编程指南

Deprecations

  • Python
    • SPARK-23122 ]弃用PySpark register*中SQLContext和UDF中的UDFCatalog
  • MLlib
    • SPARK-13​​030 ] OneHotEncoder已被弃用,将在3.0中删除。它已被新的取代OneHotEncoderEstimator。请注意,OneHotEncoderEstimator它将被重命名为OneHotEncoder3.0(但OneHotEncoderEstimator将作为别名保留)。

Changes of behavior

  • 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以来,当数据源表的数据列中存在分区模式和数据模式时,总是在运行时推断模式。推断的模式没有分区列。读取表格时,Spark尊重这些重叠列的分区值,而不是存储在数据源文件中的值。在2.2.0和2.1.x版本中,推断的模式是分区的,但表的数据对用户是不可见的(即结果集为空)。
  • PySpark
    • SPARK-19732 ]:na.fill()或者fillna也接受布尔值并用布尔值替换空值。在之前的Spark版本中,PySpark忽略它并返回原始数据集/数据帧。
    • SPARK-22395 ]:0.19.2使用Pandas相关功能(例如toPandas,createDataFrame来自Pandas DataFrame等)需要Pandas 或upper 。
    • SPARK-22395 ]:Pandas相关功能的时间戳值行为已更改为尊重会话时区,在先前的版本中会忽略该时区。
    • SPARK-23328 ]:当不是字典时,df.replace不允许省略。以前,在其他情况下可以省略,默认情况下,这是违反直觉和容易出错的。valueto_replacevalueNone
  • MLlib
    • 打破API变更:逻辑回归模型摘要的类和特征层次结构已更改为更干净,并更好地适应添加多类汇总。对于将用户代码转换LogisticRegressionTrainingSummary为a的用户代码,这是一次重大更改BinaryLogisticRegressionTrainingSummary。用户应该改用这个model.binarySummary方法。有关更多详细信息,请参见[ SPARK-17139 ](请注意,这是一个@ExperimentalAPI)。这不会影响Python摘要方法,该方法对于多项和二进制的情况都能正常工作。
    • SPARK-21806 ]:BinaryClassificationMetrics.pr()第一点(0.01.0)具有误导性,并已被(0.0,p)代替,其中精度p与最低召回点相匹配。
    • SPARK-16957 ]:决策树现在在选择拆分值时使用加权中点。这可能会改变模型训练的结果。
    • SPARK-14657 ]:RFormula现在,没有拦截,在编码字符串术语时输出引用类别,以匹配原生R行为。这可能会改变模型训练的结果。
    • SPARK-21027 ]:默认使用的并行OneVsRest度现在设置为1(即串行)。在2.2及更早版本中,并行度被设置为Scala中默认的线程池大小。这可能会改变性能。
    • SPARK-21523 ]:升级微风0.13.2。这包括强烈的Wolfe线搜索L-BFGS的重要错误修复。
    • SPARK-15526 ]:JPMML依赖关系现在用阴影表示。
    • 有关修复错误导致的行为更改,请参阅“错误修复”部分。

Known Issues

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

 


你可能感兴趣的:(spark,1.6.0,core,源码分析)