spark3.0-新特性

spark 3.0 終於出了!!!

Apache Spark 3.0.0是3.x系列的第一個發行版。投票於2020年6月10日獲得通過。此版本基於git標籤v3.0.0,其中包括截至6月10日的所有提交。Apache Spark 3.0建立在Spark 2.x的許多創新基礎之上,帶來了新的想法並持續了很長時間。正在開發的長期項目。在開源社區的巨大貢獻的幫助下,由於440多位貢獻者的貢獻,此發行版解決了3400多張門票。

今年是Spark作爲開源項目10週年。自2010年首次發佈以來,Spark已經發展成爲最活躍的開源項目之一。如今,Spark實際上是用於大數據處理,數據科學,機器學習和數據分析工作負載的統一引擎。

Spark SQL是此版本中最活躍的組件。已解決票證的46%用於Spark SQL。這些增強功能使所有更高級別的庫(包括結構化流和MLlib)以及更高級別的API(包括SQL和DataFrames)受益。此版本中添加了各種相關的優化。在TPC-DS 30TB基準測試中,Spark 3.0大約是Spark 2.4的兩倍。

Python現在是Spark上使用最廣泛的語言。PySpark每月在PyPI(Python軟件包索引)上的下載量超過500萬。此版本改善了功能和可用性,包括使用Python類型提示重新設計了熊貓UDF API,新的熊貓UDF類型以及更多的Python錯誤處理。

以下是Spark 3.0中的功能亮點:自適應查詢執行;動態分區修剪;符合ANSI SQL;熊貓API的重大改進;用於結構化流的新UI;調用R用戶定義函數的速度提高了40倍;加速器感知調度器;和SQL參考文檔。

重大改變

可識別加速器的計劃程序(SPARK-24615)
自適應查詢執行(SPARK-31412)
N動態分區修剪(SPARK-11150)
重新設計了帶有類型提示的熊貓UDF API(SPARK-28264)
結構化流式用戶界面(SPARK-29543)
目錄插件API(SPARK-31121)
Java 11支持(SPARK-24417)
Hadoop 3支持(SPARK-23534)
更好的ANSI SQL兼容性
性能增強

性能提升

自適應查詢執行(SPARK-31412)

基本框架(SPARK-23128)
洗牌後分區號調整(SPARK-28177)
動態子查詢重用(SPARK-28753)
本地隨機播放器(SPARK-28560)
偏斜連接優化(SPARK-29544)
優化讀取連續的隨機播放塊(SPARK-9853)

動態分區修剪(SPARK-11150)

其他優化器規則
規則TransposeWindow(SPARK-20636)
規則重用子查詢(SPARK-27279)
規則PushDownLeftSemiAntiJoin(SPARK-19712)
規則PushLeftSemiLeftAntiThroughJoin(SPARK-19712)
規則ReplaceNullWithFalse(SPARK-25860)
在聯接/聚合子查詢(SPARK-29343)中無限制地消除排序
規則PruneHiveTablePartitions(SPARK-15616)
從Generate(SPARK-27707)修剪不必要的嵌套字段
規則重寫NonCorrelatedExists(SPARK-29800)

最小化表緩存同步成本(SPARK-26917,SPARK-26617,SPARK-26548)
將聚合代碼拆分爲小函數(SPARK-21870)
在INSERT和ALTER TABLE ADD PARTITION命令中添加批處理(SPARK-29938)
允許將聚合器註冊爲UDAF(SPARK-27296)

SQL兼容性增強

切換到公曆(SPARK-26651)
構建Spark自己的日期時間模式定義(SPARK-31408)
介紹用於表插入的ANSI存儲分配策略(SPARK-28495)
默認情況下,在表插入中遵循ANSI存儲分配規則(SPARK-28885)
添加一個SQLConf spark.sql.ansi.enabled(SPARK-28989)
支持用於聚合表達式的ANSI SQL過濾子句(SPARK-27986)
支持ANSI SQL OVERLAY函數(SPARK-28077)
支持ANSI嵌套方括號註釋(SPARK-28880)
整數溢出時引發異常(SPARK-26218)
間隔算術運算的溢出檢查(SPARK-30341)
將無效字符串強制轉換爲數字類型時拋出異常(SPARK-30292)
使間隔乘除除的溢出行爲與其他操作一致(SPARK-30919)
爲字符和十進制添加ANSI類型別名(SPARK-29941)
SQL Parser定義了符合ANSI的保留關鍵字(SPARK-26215)
啓用ANSI模式時,禁止使用保留的關鍵字作爲標識符(SPARK-26976)
支持ANSI SQL:LIKE…ESCAPE語法(SPARK-28083)
支持ANSI SQL布爾謂詞語法(SPARK-27924)
更好地支持相關子查詢處理(SPARK-18455)

PySpark增強功能

重新設計的帶有類型提示的熊貓UDF(SPARK-28264)
允許Pandas UDF接受pd.DataFrames(SPARK- 26412 )的迭代器
支持將StructType作爲標量熊貓UDF(SPARK-27240)的參數和返回類型
通過Pandas UDF支持Dataframe Cogroup(SPARK-27463)
添加mapInPandas以允許DataFrames的迭代器(SPARK-28198)
某些SQL函數也應採用列名(SPARK-26979)
使PySpark SQL異常更具Pythonic(SPARK-31849)

可擴展性增強

目錄插件API(SPARK-31121)
數據源V2 API重構(SPARK-25390)
Hive 3.0和3.1 Metastore支持(SPARK-27970,SPARK-24360)
將Spark插件界面擴展到驅動程序(SPARK-29396)
使用執行程序插件通過用戶定義的指標擴展Spark指標系統(SPARK-28091)
擴展的列式處理支持的開發人員API(SPARK-27396)
使用DSV2的內置源遷移:parquet,ORC,CSV,JSON,Kafka,文本,Avro(SPARK-27589)
在SparkExtensions中允許功能注入(SPARK-25560)

連接器增強

支持高性能S3A提交者(SPARK-23977)
通過不確定性表達式修剪列(SPARK-29768)
spark.sql.statistics.fallBackToHdfs數據源表中的支持(SPARK-25474)
允許使用文件源上的子查詢過濾器進行分區修剪(SPARK-26893)
避免在數據源過濾器中下推子查詢(SPARK-25482)
從文件源遞歸加載數據(SPARK-27990)
parquet/ ORC

下推析取謂語(SPARK-27699)
通用化嵌套列修剪(SPARK-25603),並且默認情況下處於啓用狀態(SPARK-29805)
僅parquet
	嵌套字段的parquet謂詞下推(SPARK-17636)
僅限ORC
	支持ORC的合併架構(SPARK-11412)
	ORC的嵌套架構修剪(SPARK-27034)
	謂詞轉換的複雜性降低了ORC(火花27105,火花28108)
	將Apache ORC升級到1.5.9(SPARK-30695)

CSV
支持CSV數據源中的過濾器下推(SPARK-30323)
hiveSerde

讀取帶有本機數據源的Hive Serde表時無架構推斷(SPARK-27119)
Hive CTAS命令應使用可轉換的數據源(SPARK-25271)
使用本機數據源優化插入分區的Hive表(SPARK-28573)

kafka

添加對Kafka標頭的支持(SPARK-23539)
添加Kafka授權令牌支持(SPARK-25501)
向Kafka源代碼引入新選項:由時間戳偏移(開始/結束)(SPARK-26848)
在Kafka批處理源和流式源v1(SPARK-30656)中支持“ minPartitions”選項
將Kafka升級到2.4.1(SPARK-31126)

新的內置數據源
新的內置二進制文件數據源(SPARK-25348)
新的無操作批處理數據源(SPARK-26550)和無操作流接收器(SPARK-26649)

功能增強

[Hydrogen] 可識別加速器的調度程序(SPARK-24615)
介紹一套完整的連接提示(SPARK-27225)
爲SQL查詢添加PARTITION BY提示(SPARK-28746)
Thrift服務器中的元數據處理(SPARK-28426)
向scala API添加高階函數(SPARK-27297)
支持簡單的所有收集任​​務任務環境(SPARK-30667)
hive UDF支持UDT類型(SPARK-28158)
在Catalyst中支持DELETE / UPDATE / MERGE運算符(SPARK-28351,SPARK-28892,SPARK-28893)
實施DataFrame.tail(SPARK-30185)
新的內置功能

sinh,cosh,tanh,asinh,acosh,atanh(SPARK-28133)
任何,每個,某些(SPARK-19851)
bit_and,bit_or(SPARK-27879)
位數(SPARK-29491)
bit_xor(SPARK-29545)
bool_and,bool_or(SPARK-30184)
count_if(SPARK-27425)
date_part(SPARK-28690)
提取物(SPARK-23903)
永遠(SPARK-27905)
from_csv(SPARK-25393)
make_date(SPARK-28432)
make_interval(SPARK-29393)
make_timestamp(SPARK-28459)
map_entries(SPARK- 23935 )
map_filter(SPARK-23937)
map_zip_with(SPARK-23938)
max_by,min_by(SPARK-27653)
schema_of_csv(SPARK-25672)
to_csv(SPARK-25638)
transform_keys(SPARK-23939)
transform_values(SPARK-23940)
typeof(SPARK-29961)
版本(SPARK-29554)
xxhash64(SPARK-27099)

對現有內置功能的改進

內置的日期時間功能/操作改進(SPARK-31415)
支持from_json的FAILFAST模式(SPARK-25243)
array_sort添加一個新的比較器參數(SPARK-29020)
過濾器現在可以將索引以及元素作爲輸入(SPARK-28962)

監控和可調試性增強

新的結構化流UI(SPARK-29543)
SHS:允許將正在運行的流式應用程序的事件日誌翻轉(SPARK-28594)
SHS中的JDBC選項卡(SPARK-29724,SPARK-29726)
添加一個API,該API允許用戶在批處理和流式查詢中定義和觀察任意度量(SPARK-29345)
跟蹤每個查詢計劃時間的工具(SPARK-26129)
將基本的洗牌指標放入SQL交換運算符(SPARK-26139)
SQL語句顯示在“ SQL”選項卡中,而不是呼叫站點(SPARK-27045)
將工具提示添加到SparkUI(SPARK-29449)
提高歷史記錄服務器的併發性能(SPARK-29043)
解釋格式的命令(SPARK-27395)
支持將截斷的計劃和生成的代碼轉儲到文件(SPARK-26023)
增強描述框架來描述查詢的輸出(SPARK-26982)
添加SHOW VIEWS命令(SPARK-31113)
改善SQL解析器的錯誤消息(SPARK-27901)
支持本地Prometheus監視(SPARK-29429)
將執行者內存指標添加到心跳中,並在執行者REST API中公開(SPARK-23429)
將執行程序指標和內存使用情況檢測添加到指標系統(SPARK-27189)

文檔和測試覆蓋率增強

建立SQL參考(SPARK-28588)
構建WebUI用戶指南(SPARK-28372)
構建用於SQL配置文檔的頁面(SPARK-30510)
添加Spark配置的版本信息(SPARK-30839)
PostgreSQL的端口迴歸測試(SPARK-27763)
二手服務器測試範圍(SPARK-28608)
測試UDF(python UDF,pandas UDF,scala UDF)的測試範圍(SPARK-27921)

Kubernetes中的Native Spark App

支持用戶指定的驅動程序和執行程序窗格模板(SPARK-24434)
允許動態分配而無需外部隨機播放服務(SPARK-27963)
使用K8S(SPARK-28487)進行更快速的動態分配
Kerberos對K8S上的Spark的支持(SPARK-23257)
Kubernetes資源管理器中的Kerberos支持(客戶端模式)(SPARK-25815)
通過Hadoop兼容文件系統(SPARK-23153)支持客戶端依賴性
在k8s後端(SPARK-26239)中添加可配置的身份驗證祕密源
使用Kubernetes支持子路徑安裝(SPARK-25960)
將Python 3設置爲K8S的PySpark綁定的默認設置(SPARK-24516)

其他值得注意的變化

Java 11支持(SPARK-24417)
Hadoop 3支持(SPARK-23534)
內置的Hive執行從1.2.1升級到2.3.7(SPARK-23710,SPARK-28723,SPARK-31381)
默認情況下使用Apache Hive 2.3依賴關係(SPARK-30034)
GA Scala 2.12並刪除2.11(SPARK-26132)
改進在動態分配中使執行程序超時的邏輯(SPARK-20286)
隨機存儲的磁盤RDD塊由隨機播放服務提供服務,對於動態分配(SPARK-27677)被忽略
收購新的執行者以避免因黑名單而死機(SPARK-22148)
允許共享Netty的內存池分配器(SPARK-24920)
修復TaskMemoryManager和UnsafeExternalSorter $ SpillableIterator(SPARK-27338)之間的死鎖
引入用於結構化流的AdmissionControl API(SPARK-30669)
Spark History主頁性能改進(SPARK-25973)
加快和縮小SQL偵聽器中的指標聚合(SPARK-29562)
從同一主機獲取隨機播放塊時,請避免網絡(SPARK-27651)
改進DistributedFileSystem的文件列表(SPARK-27801)
刪除對hadoop 2.6的支持(SPARK-25016)

spark streaming

在Spark 3.0中,已棄用的類org.apache.spark.sql.streaming.ProcessingTime已被刪除。使用org.apache.spark.sql.streaming.Trigger.ProcessingTime代替。同樣,org.apache.spark.sql.execution.streaming.continuous.ContinuousTrigger已被刪除以支持Trigger.Continuous,並且org.apache.spark.sql.execution.streaming.OneTimeTrigger已被隱藏以支持Trigger.Once。(SPARK-28199)
由於Scala 2.12的升級,DataStreamWriter.foreachBatch與Scala程序的源代碼不兼容。您需要更新Scala源代碼以消除Scala函數和Java lambda之間的歧義。(SPARK-26132)
編程指南:《Spark RDD編程指南》和《Spark SQL》,《數據框架和數據集指南》以及《結構化流編程指南》。

ML

多列支持添加到Binarizer(SPARK-23578),StringIndexer(SPARK-11215),StopWordsRemover(SPARK-29808)和PySpark QuantileDiscretizer(SPARK-22796)
支持基於樹的特徵轉換(SPARK-13​​677)
添加了兩個新的評估器MultilabelClassificationEvaluator(SPARK-16692)和RankEvaluator(SPARK-28045)
在DecisionTreeClassifier /迴歸(加入樣品重量支撐火花19591),RandomForestClassifier /迴歸(火花9478),GBTClassifier /迴歸(火花9612),RegressionEvaluator(火花24102),BinaryClassificationEvaluator(火花24103),BisectingKMeans(火花-30351),KMeans(SPARK-29967)和GaussianMixture(SPARK-30102)
添加了用於PowerIterationClustering的R API(SPARK-19827)
添加了用於跟蹤ML管道狀態的Spark ML偵聽器(SPARK-23674)
適合驗證集已添加到Python的Gradient Boosted Trees(SPARK-24333)
添加了RobustScaler變壓器(SPARK-28399)
增加了分解機分類器和迴歸器(SPARK-29224)
添加了高斯樸素貝葉斯(SPARK-16872)和互補樸素貝葉斯(SPARK-29942)
Scala和Python之間的ML函數奇偶校驗(SPARK-28958)
在所有的分類模型中都將predictRaw公開。除LinearSVCModel(SPARK-30358)之外,所有其他分類模型中均公開了predictProbability

行爲改變

Pyspark

在Spark 3.0中,Pyspark中的多類logistic迴歸現在(正確)將返回LogisticRegressionSummary,而不是子類BinaryLogisticRegressionSummary。在這種情況下,BinaryLogisticRegressionSummary公開的其他方法無論如何都不起作用。(SPARK-31681)
在Spark 3.0中,pyspark.ml.param.shared.Has * mixins不再提供任何set (self,value)setter方法,請改用相應的self.set(self.value)。有關詳細信息,請參見SPARK-29093。(SPARK-29093)
編程指南:《機器學習庫(MLlib)指南》。

SparkR

SparkR互操作性中的箭頭優化(SPARK-26759)
通過向量化的R gapply(),dapply(),createDataFrame,collect()來提高性能
R shell,IDE(SPARK-24572)的“渴望執行”
用於電源迭代羣集的R API(SPARK-19827)
行爲改變

棄用

棄用Python 2支持(SPARK-27884)
棄用R ❤️.4支持(SPARK-26014)
棄用UserDefinedAggregateFunction(Spark-30423)

bug修復

帶dropDuplicates操作符的流查詢可能無法使用Spark 2.x編寫的檢查點重新啓動。這將在Spark 3.0.1中修復。(SPARK-31990)
在Web UI中,作業列表頁面可能會掛起40秒鐘以上。這將在Spark 3.0.1中修復。(SPARK-31967)
io.netty.tryReflectionSetAccessible在JDK9 +上爲Arrow 設置(SPARK-29923)
通過將AWS開發工具包SDK升級到1.11.655,我們強烈建議在Hadoop 2.7.3上使用S3N文件系統(基於jets3t庫的開源NativeS3FileSystem)的用戶升級以使用AWS Signature V4並設置存儲桶終結點或遷移到S3A(前綴“ s3a://”)-jets3t庫默認使用AWS v2,並使用s3.amazonaws.com作爲端點。否則,在以下情況下可能會引發403 Forbidden錯誤:
如果用戶訪問包含“ +”字符的S3路徑並使用舊版S3N文件系統,例如s3n:// bucket / path / + file。
如果用戶已配置AWS V2簽名以使用S3N文件系統簽署對S3的請求。
請注意,如果您使用S3AFileSystem,例如(“ s3a:// bucket / path”)來訪問S3Select或SQS連接器中的S3,則一切都會按預期進行。(SPARK-30968)

如果年份字段丟失,則使用模式字母’D’解析一年中的日期將返回錯誤的結果。這可能發生在SQL函數中,例如to_timestamp使用模式字符串將datetime字符串解析爲datetime值的SQL函數。這將在Spark 3.0.1中修復。(SPARK-31939)
如果鍵的值爲-0.0和0.0,則子查詢內的Join / Window / Aggregate可能導致錯誤的結果。這將在Spark 3.0.1中修復。(SPARK-31958)
窗口查詢可能會因模棱兩可的自聯接錯誤意外失敗。這將在Spark 3.0.1中修復。(SPARK-31956)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章