Databricks RuntimeX迁移指南

本指南提供了帮助您从Databricks Runtime 6迁移Databricks工作负载的指导。在Apache Spark 2.4上构建的Databricks Runtime 7.3 LTSorgydF4y2BaDatabricks Runtime 7.6(不支持)(最新的Databricks Runtime 7。xrelease), both built on Spark 3.0. The same migration considerations apply for Databricks Runtime 7.3 LTS for Machine Learning, Databricks Runtime 7.3 LTS for Genomics, and Databricks Runtime 7.6 for Machine Learning.

本指南列出了Spark 3.0行为改变这可能需要您更新Databricks工作负载。其中一些变化包括完全取消对Python 2的支持,升级到Scala 2.12,完全支持JDK 11,以及日期和时间戳从格里高利历切换到prospect日历。

本指南是Databricks Runtime 7.3 LTS迁移指南

Databricks运行时7.3 LTS和7.6系统环境

  • 操作系统: Ubuntu 18.04.5 LTS

  • Java

    • 7.6:Zulu 8.50.0.51-CA-linux64 (build 1.8.0_275-b01)

    • 7.3 LTS:Zulu 8.48.0.53-CA-linux64 (build 1.8.0_265-b11)

  • Scala: 2.12.10

  • Python: 3.7.5

  • R: 3.6.3 (2020-02-29)

  • 三角洲湖0.7.0

Apache Spark 3.0的主要行为改变

当您从Databricks Runtime 6迁移时,以下从Spark 2.4到Spark 3.0的行为更改可能需要您更新Databricks工作负载。到Databricks Runtime 7.x。

请注意

本文提供了一个重要的Spark行为更改列表,供您在迁移到Databricks Runtime 7.x时考虑。有关行为更改的完整列表,请参见Spark 3.0.1迁移指南

核心

  • 在Spark 3.0中,已弃用的累加器v1被移除。

  • 事件日志文件将以UTF-8编码写入,Spark History Server将以UTF-8编码重放事件日志文件。此前Spark将事件日志文件写入驱动程序JVM进程的默认字符集,因此Spark 2的Spark History Server。在编码不兼容的情况下,需要X来读取旧的事件日志文件。

  • 使用了一种新的抓取shuffle块的协议。建议在运行Spark 3.0应用时升级外部shuffle服务。您仍然可以通过设置配置使用旧的外部shuffle服务spark.shuffle.useOldFetchProtocol真正的.否则,Spark可能会遇到类似这样的消息错误IllegalArgumentException:意想不到的消息类型:<数>

PySpark

  • 在Spark 3.0中Column.getItem是固定的以致它不召唤吗Column.apply.因此,如果用作对getItem,则应使用索引操作符。例如,map_col.getItem(坳(id))应该用map_col[坳(id)]

  • 从Spark 3.0开始,Python 3.6及以上版本使用命名参数构造时,字段名不再按字母顺序排序,字段的顺序将与输入的顺序匹配。如在Spark 2.4中一样,要默认启用排序字段,请设置环境变量PYSPARK_ROW_FIELD_SORTING_ENABLED真正的对于执行程序和驱动程序。该环境变量必须在所有执行程序和驱动程序上保持一致。否则,可能会导致失败或错误的答案。对于低于3.6的Python版本,字段名是按字母顺序排序的,这是唯一的选项。

  • 已弃用的Python 2支持(火星- 27884).

结构化流

  • 在Spark 3.0中,当使用基于文件的数据源(如text、json、csv、parquet和orc)时,结构化流将源模式强制为空spark.readStream(…).以前,它尊重源模式中的可空性;然而,它导致了棘手的问题,调试与NPE。若要恢复先前的行为,请设置spark.sql.streaming.fileSource.schema.forceNullable

  • Spark 3.0修复了流-流外部连接的正确性问题,这会改变状态模式。看到火星- 26154欲知详情。如果您从Spark 2构建的检查点开始查询。xwhich uses stream-stream outer join, Spark 3.0 fails the query. To recalculate outputs, discard the checkpoint and replay previous inputs.

  • 在Spark 3.0中,已弃用的类org.apache.spark.sql.streaming.ProcessingTime已被删除。使用org.apache.spark.sql.streaming.Trigger.ProcessingTime代替。同样的,org.apache.spark.sql.execution.streaming.continuous.ContinuousTrigger已经被移除了,取而代之的是触发器。连续,org.apache.spark.sql.execution.streaming.OneTimeTrigger一直隐藏在偏爱之中触发器。一次.看到火星- 28199

SQL,数据集和数据帧

  • 在Spark 3.0中,当将一个值插入到具有不同数据类型的表列中时,类型强制转换将按照ANSI SQL标准执行。某些不合理的类型转换,如转换字符串int而且布尔是不允许。如果值超出列数据类型的范围,则将引发运行时异常。在Spark 2.4及更早的版本中,只要类型转换有效,就允许在表插入期间进行类型转换.当将超出范围的值插入到整型字段时,将插入该值的低阶位(与Java/Scala数值类型强制转换相同)。例如,如果将257插入到字节类型的字段中,结果为1。行为由选项控制spark.sql.storeAssignmentPolicy,默认值为“ANSI”。将选项设置为“Legacy”将恢复以前的行为。

  • 在Spark 3.0中,当将字符串值转换为整型(tinyint, smallint, int和bigint), datetime类型(date, timestamp和interval)和布尔类型时,前导和尾部的空白(<= ACSII 32)在转换为这些类型值之前会被修剪铸造('1 \ t '作为int)返回1铸造('1 \ t '作为布尔型)返回真正的(“2019-10-10 \ t作为日期)返回日期值2019-10-10.在Spark 2.4及更早的版本中,当将字符串强制转换为整数和布尔值时,它不会从两端修剪空白,前面的结果将是,而到datetimes,只有尾随空格(= ASCII 32)将被删除。看到//www.neidfyre.com/blog/2020/07/22/a-comprehensive-look-at-dates-and-timestamps-in-apache-spark-3-0.html

  • 在Spark 3.0中,已弃用的方法SQLContext.createExternalTable而且SparkSession.createExternalTable已经被移除,取而代之的是,不知道

  • 在Spark 3.0中,配置spark.sql.crossJoin.enabled变成内部配置,默认情况下为true,因此默认情况下Spark不会在使用隐式交叉连接的SQL上引发异常。

  • 在Spark 3.0中,我们颠倒了trim函数的参数顺序削减(trimStrstr)削减(str,trimStr)与其他数据库兼容。

  • 在Spark 2.4及更早的版本中,SQL查询如<表>orgydF4y2Ba<表>联盟所有<表>都是由意外支持的。在hive-style<表>选择< expr >,选择条款是不可忽视的。Hive和Presto都不支持这种语法。因此,从Spark 3.0开始,我们将这些查询视为无效。

  • Spark 3.0以来,Dataset和DataFrame APIunionAll不再弃用。的别名联盟

  • 在Spark 2.4及更早的版本中,JSON数据源的解析器将一些数据类型的空字符串视为null,例如IntegerType.为FloatType而且倍增式,它在空字符串上失败并抛出异常。自Spark 3.0以来,我们不允许空字符串,并将对数据类型抛出异常StringType而且BinaryType

  • 从Spark 3.0开始,from_json函数支持两种模式-宽容的而且FAILFAST.模式可以通过模式选择。默认模式变成了宽容的.的行为from_json都不符合吗宽容的orgydF4y2BaFAILFAST,特别是在处理格式错误的JSON记录时。例如,JSON字符串{“a”1}使用模式一个INT转换为Spark 3.0将其转换为行(空)

DDL语句

  • 在Spark 3.0中创建表格的值spark.sql.sources.default作为其提供者。在Spark 2.4及以下版本中,它是Hive。若要恢复Spark 3.0之前的行为,可以设置spark.sql.legacy.createHiveTableByDefault.enabled真正的

  • 在Spark 3.0中,当将一个值插入到具有不同数据类型的表列中时,类型强制转换将按照ANSI SQL标准执行。某些不合理的类型转换,如转换字符串int而且布尔是不允许。如果值超出列数据类型的范围,则抛出运行时异常。在Spark 2.4及以下版本中,只要类型转换有效,就允许在表插入期间进行类型转换.当将超出范围的值插入到整型字段时,将插入该值的低阶位(与Java/Scala数值类型强制转换相同)。例如,如果将257插入到字节类型的字段中,结果为1。行为由选项控制spark.sql.storeAssignmentPolicy,默认值为“ANSI”。将该选项设置为“Legacy”将恢复以前的行为。

  • 在Spark 3.0中显示创建表格总是返回Spark DDL,即使给定的表是Hive SerDe表。用于生成Hive DDL显示创建表格作为SERDE命令。

  • 在Spark 3.0中,的列字符类型在非hive - serde表中是不允许的创建/修改表格命令将在以下情况下失败字符检测类型。请使用字符串类型。在Spark 2.4及以下版本中,字符类型被视为字符串类型和长度参数被简单地忽略。

udf和内置函数

  • 在Spark 3.0中,使用org.apache.spark.sql.functions.udf (AnyRef数据类型)默认不允许。集spark.sql.legacy.allowUntypedScalaUDF真正的继续使用它。在Spark 2.4及以下版本中,如果org.apache.spark.sql.functions.udf (AnyRef数据类型)获取一个带有原语类型参数的Scala闭包,如果输入值为空,则返回的UDF返回null。但是,在Spark 3.0中,如果输入值为空,UDF将返回Java类型的默认值。例如,瓦尔fudf (x):Int)= >x,IntegerType),f (x美元)如果列x为空,则在Spark 2.4及以下版本中返回null,在Spark 3.0中返回0。引入这种行为变化是因为Spark 3.0默认是用Scala 2.12构建的。

  • 在Spark 2.4及以下版本中,您可以通过内置函数创建具有重复键的映射,例如CreateMapStringToMap等。具有重复键的映射的行为是未定义的,例如,映射查找首先出现重复键,Dataset.collect只保留最后出现的复制密钥,MapKeys返回重复的键,等等。在Spark 3.0中,Spark抛出RuntimeException当发现重复的密钥时。你可以设置spark.sql.mapKeyDedupPolicyLAST_WIN使用last wins策略重复删除映射键。用户仍然可以从没有强制执行的数据源(例如Parquet)读取带有重复键的映射值,这种行为是未定义的。

数据源

  • 在Spark 2.4及以下版本中,如果分区列值不能转换为相应的用户提供的模式,则将其转换为空。在3.0中,分区列值使用用户提供的模式进行验证。如果验证失败,则抛出异常。您可以通过设置禁用这种验证spark.sql.sources.validatePartitionColumns

  • 在Spark 2.4及以下版本中,JSON数据源的解析器将一些数据类型的空字符串视为null,例如IntegerType.为FloatType倍增式DateType而且TimestampType,它在空字符串上失败并抛出异常。Spark 3.0禁止空字符串,并将对数据类型抛出异常StringType而且BinaryType.以前允许空字符串的行为可以通过设置恢复spark.sql.legacy.json.allowEmptyString.enabled真正的

  • 在Spark 3.0中,如果文件或子目录在递归目录列表期间消失(也就是说,它们出现在中间列表中,但在递归目录列表的后面阶段由于并发文件删除或对象存储一致性问题而无法读取或列出),则列表将失败,并出现异常,除非spark.sql.files.ignoreMissingFiles真正的(默认错误)。在以前的版本中,这些缺失的文件或子目录将被忽略。注意,这种行为更改仅适用于最初的表文件列出期间(或刷新表格),而不是在查询执行期间:净变化是spark.sql.files.ignoreMissingFiles现在在表文件列出和查询计划期间服从,而不仅仅是在查询执行时。

  • 在Spark 2.4及以下版本中,CSV数据源在PERMISSIVE模式下将格式错误的CSV字符串转换为全为空的行。在Spark 3.0中,如果某些CSV列值被成功解析并转换为所需类型,则返回的行可以包含非空字段。

  • 在Spark 3.0中,拼花逻辑类型TIMESTAMP_MICROS保存时默认使用时间戳列。在Spark 2.4及以下版本中,时间戳列保存为INT96用拼花锉。注意一些SQL系统,如Hive 1。x和黑斑羚2。xcan only read INT96 timestamps. You can setspark.sql.parquet.outputTimestampType作为INT96恢复之前的行为并保持互操作性。

  • 在Spark 3.0中,当使用用户提供的模式写入Avro文件时,字段匹配的是catalyst模式和Avro模式之间的字段名,而不是位置。

查询引擎

  • 在Spark 3.0中,如果数据集包含由自连接引起的模糊列引用,则查询失败。一个典型的例子:瓦尔df1…;瓦尔df2df1.filter(…);然后df1.join (df2df1(“”)>df2(“a”))返回一个空结果,这很令人困惑。这是因为Spark无法解析指向自连接表的Dataset列引用df1(“”)是一样的吗df2(“”)在火花。若要恢复Spark 3.0之前的行为,可以设置spark.sql.analyzer.failAmbiguousSelfJoin

  • 在Spark 3.0中,以科学记数法(例如,1 e2)被解析为.在Spark 2.4及以下版本中,它们被解析为小数.若要恢复spark 3.0之前的行为,可以设置spark.sql.legacy.exponentLiteralAsDecimal.enabled真正的

  • 在Spark 3.0中,配置spark.sql.crossJoin.enabled成为内部配置,默认为true。默认情况下,Spark不会在使用隐式交叉连接的SQL上引发异常。

  • 在Spark 2.4及以下版本中,float/double -0.0在语义上等于0.0,但-0.0和0.0在聚合分组键、窗口分区键和连接键中被认为是不同的值。在Spark 3.0中,此错误已修复。例如,Seq (-0.0,0.0) .toDF (d) .groupBy (d) .count ()返回[(0.0,2))Spark 3.0版本[(0.0,1),(-0.0,1))Spark 2.4及以下版本。

  • 在Spark 3.0中时间戳使用SQL配置将文字转换为字符串spark.sql.session.timeZone.在Spark 2.4及以下版本中,转换使用Java虚拟机的默认时区。

  • 在Spark 3.0中,Spark使用强制转换字符串日期/时间戳与日期/时间戳进行二进制比较。先前的强制转换行为日期/时间戳字符串可以通过设置恢复吗spark.sql.legacy.typeCoercion.datetimeToString.enabled真正的

  • 在Spark 2.4及以下版本中,无效的时区id将被无声地忽略并替换为GMT时区from_utc_timestamp函数。在Spark 3.0中,这样的时区id将被拒绝,并被Spark抛出java.time.DateTimeException

  • 在Spark 3.0中,prospect Gregorian calendar被用于解析、格式化和转换日期和时间戳,以及提取年、日等子组件。Spark 3.0使用Java 8 API类。时间包是基于ISO年表.在Spark 2.4及以下版本中,这些操作使用混合日历(朱利安+格里高利).这些更改影响1582年10月15日(公历)之前的日期的结果,并影响以下Spark 3.0 API:

    • 时间戳/日期字符串的解析/格式化。这对CSV/JSON数据源和unix_timestampdate_formatto_unix_timestampfrom_unixtimeto_dateto_timestamp当使用用户指定的模式进行解析和格式化时使用。在Spark 3.0中,我们在中定义了自己的模式字符串sql-ref-datetime-pattern.md,通过java.time.format.DateTimeFormatter在引擎盖下面。新的实现对其输入执行严格的检查。例如,2015-07-2210:00:00如果模式是,则不能解析时间戳yyyy-MM-dd因为解析器不消耗整个输入。另一个例子是31/01/201500:00方法不能解析输入dd / MM / yyyyhh: mm模式,因为hh预设时间范围为1-12。在Spark 2.4及以下版本中,java.text.SimpleDateFormat用于时间戳/日期字符串转换,支持的模式在simpleDateFormat.旧的行为可以通过设置恢复spark.sql.legacy.timeParserPolicy遗产

    • weekofyear工作日dayofweekdate_truncfrom_utc_timestampto_utc_timestamp,unix_timestamp函数使用java.timeAPI用于计算年的周数,周的日数以及从/到的转换TimestampTypeUTC时区的值。

    • JDBC选项下界而且upperBound转换为时间戳类型/日期类型值的方法与将字符串转换为时间戳类型/日期类型值的方法相同。转换基于预期公历和SQL配置定义的时区spark.sql.session.timeZone.在Spark 2.4及以下版本中,转换基于混合日历(儒略历+格里高利历)和默认系统时区。

    • 格式化时间戳而且日期字面值。

    • 创建类型时间戳而且日期来自字符串的字面量。在Spark 3.0中,字符串转换为类型化时间/日期字面量是通过强制转换来执行的时间/日期值。例如,时间戳“2019-12-2312:59:30”语义上等于铸造(' 2019-12-2312:59:30”作为时间戳).当输入字符串不包含时区信息时,从SQL配置中获取时区spark.sql.session.timeZone在这种情况下使用。在Spark 2.4及以下版本中,转换基于JVM系统时区。默认时区的不同来源可能会改变键入的行为时间戳而且日期字面值。

Apache蜂巢

  • 在Spark 3.0中,我们将内置的Hive版本从1.2升级到2.3,带来的影响如下:

    • 你可能需要设置spark.sql.hive.metastore.version而且spark.sql.hive.metastore.jars根据你要连接的蜂巢亚稳态的版本。例如:setspark.sql.hive.metastore.version1.2.1 "而且spark.sql.hive.metastore.jarsmaven如果你的Hive metastore版本是1.2.1。

    • 您需要将您的自定义SerDes迁移到Hive 2.3或构建您自己的Spark蜂巢- 1.2概要文件。看到蜂巢- 15167欲知详情。

    • 使用时,十进制字符串表示可以在Hive 1.2和Hive 2.3之间有所不同变换用于脚本转换的SQL操作符,这取决于hive的行为。在Hive 1.2中,字符串表示省略了后面的零。但在Hive 2.3中,如果需要,它总是被填充为18位,后面带零。

    • 在Databricks Runtime 7。x,when reading a Hive SerDe table, by default Spark disallows reading files under a subdirectory that is not a table partition. To enable it, set the configurationspark.databricks.io.hive.scanNonpartitionedDirectory.enabled作为真正的.这不会影响Spark本机表读取器和文件读取器。

MLlib

  • OneHotEncoder,在2.3中已弃用,在3.0和OneHotEncoderEstimator现在重命名为OneHotEncoder

  • org.apache.spark.ml.image.ImageSchema.readImages,在2.3中已弃用,在3.0中被移除。使用spark.read.format('图像')代替。

  • org.apache.spark.mllib.clustering.KMeans.train参数为Int运行,在2.1中已弃用,在3.0中被移除。用不跑步的训练法代替。

  • org.apache.spark.mllib.classification.LogisticRegressionWithSGD,在2.0中已弃用,在3.0中已删除org.apache.spark.ml.classification.LogisticRegressionorgydF4y2Baspark.mllib.classification.LogisticRegressionWithLBFGS代替。

  • org.apache.spark.mllib.feature.ChiSqSelectorModel.isSorted,在2.1中已弃用,在3.0中被移除,不打算供子类使用。

  • org.apache.spark.mllib.regression.RidgeRegressionWithSGD,在2.0中已弃用,但在3.0中已被移除。使用org.apache.spark.ml.regression.LinearRegressionelasticNetParam0.0.注意默认值regParam等于0.01RidgeRegressionWithSGD,但为0.0LinearRegression

  • org.apache.spark.mllib.regression.LassoWithSGD,在2.0中已弃用,但在3.0中已被移除。使用org.apache.spark.ml.regression.LinearRegressionelasticNetParam1.0.注意默认值regParam等于0.01LassoWithSGD,但为0.0LinearRegression

  • org.apache.spark.mllib.regression.LinearRegressionWithSGD,在2.0中已弃用,但在3.0中已被移除。使用org.apache.spark.ml.regression.LinearRegressionorgydF4y2BaLBFGS代替。

  • org.apache.spark.mllib.clustering.KMeans.getRuns而且setRuns,在2.1中已弃用,在3.0中被移除,并且自Spark 2.0.0以来没有任何影响。

  • org.apache.spark.ml.LinearSVCModel.setWeightCol,它在2.4中已弃用,在3.0中被移除,不适合用户使用。

  • 在3.0中,org.apache.spark.ml.classification.MultilayerPerceptronClassificationModel扩展MultilayerPerceptronParams暴露训练参数。结果,MultilayerPerceptronClassificationModel已从数组(Int)IntArrayParam.你应该使用MultilayerPerceptronClassificationModel.getLayers而不是MultilayerPerceptronClassificationModel.layers检索层的大小。

  • org.apache.spark.ml.classification.GBTClassifier.numTrees,在2.4.5中已弃用,在3.0中被移除。使用getNumTrees代替。

  • org.apache.spark.ml.clustering.KMeansModel.computeCost,在2.4中已弃用,在3.0中被移除ClusteringEvaluator代替。

  • 中的成员变量精度org.apache.spark.mllib.evaluation.MulticlassMetrics,在2.0中已弃用,但在3.0中已被移除。而是使用准确性。

  • 成员变量召回org.apache.spark.mllib.evaluation.MulticlassMetrics,在2.0中已弃用,但在3.0中已被移除。使用精度代替。

  • 成员变量fMeasureorg.apache.spark.mllib.evaluation.MulticlassMetrics,在2.0中已弃用,但在3.0中已被移除。使用精度代替。

  • org.apache.spark.ml.util.GeneralMLWriter.context,在2.0中已弃用,但在3.0中已被移除。使用会话代替。

  • org.apache.spark.ml.util.MLWriter.context,在2.0中已弃用,但在3.0中已被移除。使用会话代替。

  • org.apache.spark.ml.util.MLReader.context,在2.0中已弃用,但在3.0中已被移除。使用会话代替。

  • 摘要UnaryTransformer (,出来,T<:UnaryTransformer (,出来,T]]变为摘要UnaryTransformer (:类型标签,:类型标签,T<:UnaryTransformer (,出来,T]]在3.0。

  • 在Spark 3.0中,Pyspark中的多类逻辑回归现在将(正确地)返回LogisticRegressionSummary,而不是子类BinaryLogisticRegressionSummary.所暴露的附加方法BinaryLogisticRegressionSummary在这种情况下不管用。(火星- 31681

  • 在Spark 3.0中pyspark.ml.param.shared.Has *Mixins不提供任何信息设置*(自我,值)Setter方法,使用各自的self.set(自我。*,值)代替。详见SPARK-29093。(火星- 29093

其他行为变化

  • 升级到Scala 2.12的主要变化如下:

    • 包单元格序列化的处理方式不同。下面的示例说明了行为更改以及如何处理它。

      运行foo.bar.MyObjectInPackageCell.run ()如下包单元格中定义的那样将触发错误java.lang.NoClassDefFoundError:可以初始化foo.bar.MyObjectInPackageCell美元

      喷火酒吧情况下MyIntStructintInt进口orgapache火花sqlSparkSession进口orgapache火花sql功能_进口orgapache火花sql对象MyObjectInPackageCell扩展可序列化的//因为SparkSession不能在Spark executor中创建,//下面的行触发错误//无法初始化foo.bar.MyObjectInPackageCell$ . exe类瓦尔火花SparkSession构建器getOrCreate()def喷火Int= >选项MyIntStructxInt= >一些MyIntStructOne hundred.))瓦尔theUDFudf喷火瓦尔df瓦尔myUDFInstancetheUDF上校“id”))火花范围0111).withColumn“u”myUDFInstancedef运行():单位df收集().foreachprintln

      要解决这个错误,可以使用换行MyObjectInPackageCell在可序列化类内部。

    • 某些情况下使用DataStreamWriter.foreachBatch将需要一个源代码更新。这个变化是由于Scala 2.12具有从lambda表达式到SAM类型的自动转换,这可能会导致歧义。

      例如,下面的Scala代码无法编译:

      writeStreamforeachBatchdfid= >myFuncdfid

      若要修复编译错误,请更改foreachBatch(df,id)= >myFunc (df,id)foreachBatch (myFunc_)或者显式地使用Java API:foreachBatch(新VoidFunction2…)

  • 随着AWS SDK升级到1.11.655,使用org.apache.hadoop.fs.s3native.NativeS3FileSystem需要AWS Signature v4和桶端点设置。如果用户已将AWS Signature v2配置为使用S3N文件系统对S3的请求进行签名,或者用户访问包含“+”字符的S3路径并使用旧的S3N文件系统(例如S3N://bucket/path/+文件),则可能抛出403 Forbidden错误。

  • 由于处理Hive自定义函数和Hive SerDes的Apache Hive版本升级到2.3,需要进行以下两个修改:

    • 蜂巢的SerDe接口被抽象类替换AbstractSerDe.对于任何自定义HiveSerDe实现,迁移到AbstractSerDe是必需的。

    • 设置spark.sql.hive.metastore.jars内装式这意味着Hive 2.3的metastore客户端将被用来访问Databricks Runtime 7.x的metastore。如果需要访问基于Hive 1.2的外部亚metastore,请设置spark.sql.hive.metastore.jars到包含Hive 1.2 jar的文件夹。

弃用和删除

  • 数据跳跃索引在Databricks Runtime 4.3中已弃用,在Databricks Runtime 7.x中已移除。我们建议您改用Delta表,它提供改进的数据跳过功能

  • 在Databricks Runtime 7。x,the underlying version of Apache Spark uses Scala 2.12. Since libraries compiled against Scala 2.11 can disable Databricks Runtime 7.x clusters in unexpected ways, clusters running Databricks Runtime 7.x do not install配置为安装在所有集群上的库.集群库选项卡显示状态跳过以及一条解释库处理更改的弃用消息。但是,如果您有一个在早期版本的Databricks Runtime上创建的集群在Databricks平台3.20版bob体育客户端下载本发布到您的工作空间之前,现在编辑该集群以使用Databricks Runtime 7。x,一个ny libraries that were configured to be installed on all clusters will be installed on that cluster. In this case, any incompatible JARs in the installed libraries can cause the cluster to be disabled. The workaround is either to clone the cluster or to create a new cluster.

  • org.apache.hadoop.fs.s3native.NativeS3FileSystem而且org.apache.hadoop.fs.s3.S3FileSystem不再支持访问S3。

    我们强烈建议您使用com.databricks.s3a.S3AFileSystem,这是默认的s3a: / /s3: / /,s3n: / /Databricks Runtime中的文件系统方案。如果您需要迁移到com.databricks.s3a.S3AFileSystem,请联系Databricks支持或您的Databricks代表。

已知的问题

  • 如果缺少年份字段,则使用模式字母“D”解析年份的日期将返回错误的结果。这可能发生在SQL函数中,例如to_timestamp它使用模式字符串将日期时间字符串解析为日期时间值。(火星- 31939

  • 如果键值为-0.0和0.0,子查询中的Join/Window/Aggregate可能会导致错误的结果。(火星- 31958

  • 窗口查询可能会因意外的模糊自连接错误而失败。(火星- 31956

  • 使用dropDuplicates操作人员可能无法重新启动Spark 2.x写入的检查点。(火星- 31990