磚運行時7。x遷移指南

本指南提供了幫助您從Databricks Runtime 6遷移Databricks工作負載的指導。在Apache Spark 2.4上構建的Databricks Runtime 7.3 LTSorgydF4y2BaDatabricks運行時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,以及將日期和時間戳從Gregorian日曆切換到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(編譯1.8.0_275-b01)

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

  • Scala: 2.12.10

  • Python: 3.7.5

  • R3.6.3 (2020-02-29)

  • 三角洲湖0.7.0

Apache Spark 3.0的主要行為改變

以下從Spark 2.4到Spark 3.0的行為變化可能需要您在從Databricks Runtime 6遷移時更新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

  • 在火花3.0中,Column.getItem是固定的嗎Column.apply.因此,如果用作to的參數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)被via使用時,結構化流將源模式強製為空spark.readStream(…).以前,它尊重源模式的空性;然而,它導致了使用NPE進行調試的棘手問題。若要恢複以前的行為,請設置spark.sql.streaming.fileSource.schema.forceNullable

  • Spark 3.0修複了Stream-stream外部連接的正確性問題,這改變了狀態模式。看到火星- 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類型(日期、時間戳和間隔)和布爾類型時,前導和末尾的空白(<= ACSII 32)在轉換為這些類型值之前會被修剪鑄造('1 \ t '作為int)返回1鑄造('1 \ t '作為布爾型)返回真正的(“2019-10-10 \ t作為日期)返回日期值2019-10-10.在Spark 2.4及更早的版本中,當將字符串轉換為整數和布爾值時,它不會從兩端修剪空白,前麵的結果將是,而到datetimes,隻有尾隨空格(= ASCII 32)將被刪除。看到//www.eheci.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數據源的解析器將一些數據類型的空字符串視為空,例如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語句

  • 在火花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”將恢複之前的行為。

  • 在火花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使用最後勝出策略重刪映射鍵。用戶仍然可能從沒有強製執行的數據源(例如,Parquet)讀取具有重複鍵的地圖值,這種行為是未定義的。

數據源

  • 在Spark 2.4及以下版本中,如果分區列值不能轉換為相應的用戶提供的模式,它將被轉換為空。在3.0中,分區列值使用用戶提供的模式進行驗證。如果驗證失敗,則拋出異常。您可以通過設置禁用這種驗證spark.sql.sources.validatePartitionColumns

  • 在Spark 2.4及以下版本中,JSON數據源的解析器將一些數據類型的空字符串視為空,例如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數據源在permit模式中將格式不正確的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中,這個bug已經修複。例如,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及以下版本。

  • 在火花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中,outlook公曆用於解析、格式化和轉換日期和時間戳,以及提取年、日等子組件。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.time用於計算年的周數,周的天數以及從/到的轉換的APITimestampTypeUTC時區的值。

    • JDBC選項下界而且upperBound轉換為timestamp /DateType值的方法與將字符串轉換為timestamp /DateType值的方法相同。轉換基於預期公曆和SQL配置定義的時區spark.sql.session.timeZone.在Spark 2.4及以下版本中,轉換基於混合日曆(Julian + Gregorian)和默認係統時區。

    • 格式化時間戳而且日期字麵值。

    • 創建類型時間戳而且日期從字符串字麵值。在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根據你想連接的蜂巢轉移體的版本。例如:設置spark.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時,十進製字符串表示可以不同變換操作符用於腳本轉換,這取決於hive的行為。在Hive 1.2中,字符串表示省略了末尾的0。但在Hive 2.3中,如果有必要,它總是被填充為18位,並帶有尾隨零。

    • 在Databricks運行時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中被移除。而是使用精度。

  • 成員變量recall inorg.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

  • 在火花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執行器中創建,//下麵的行觸發錯誤//無法初始化foo.bar.MyObjectInPackageCell$瓦爾火花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/+file),則可能拋出403 Forbidden錯誤。

  • 由於處理Hive自定義函數和Hive SerDes的Apache Hive版本升級到2.3,需要進行兩個修改:

    • 蜂巢的SerDe接口被抽象類替換AbstractSerDe.任何自定義蜂巢SerDe實現,遷移到AbstractSerDe是必需的。

    • 設置spark.sql.hive.metastore.jars內裝式這意味著Hive 2.3的metastore客戶端將被用來訪問Databricks Runtime 7.x的metastore。如果你需要訪問基於Hive 1.2的外部亞轉移,設置spark.sql.hive.metastore.jars到包含Hive 1.2 jar的文件夾。

不支持和刪除

  • 數據跳過索引在Databricks Runtime 4.3中已棄用,在Databricks Runtime 7.x中已刪除。我們建議您使用Delta表,它提供改進的數據跳過功能

  • 在Databricks運行時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.2Beplay体育安卓版本0發布到您的工作區之前,現在編輯該集群以使用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運行時中的文件係統方案。如果您需要協助遷移到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