Spark Release 3.4.0

Apache Spark 3.4.0 は、3.x ラインの5番目のリリースです。オープンソースコミュニティからの多大な貢献により、このリリースでは2,600件以上のJiraチケットが解決されました。

このリリースでは、Spark Connect の Python クライアント、非同期進捗追跡と Python の任意のステートフル処理による Structured Streaming の拡張、Pandas API カバレッジの拡大と NumPy 入力サポートの提供、ANSI 準拠の向上と多数の組み込み関数の実装による従来のデータウェアハウスからの移行の簡素化、メモリプロファイリングによる開発生産性とデバッグ可能性の向上などが導入されています。

Apache Spark 3.4.0 をダウンロードするには、ダウンロードページをご覧ください。詳細な変更点についてはJIRAをご参照ください。ここでは、主要モジュールごとにグループ化された変更点の概要をまとめました。

ハイライト

  • Spark Connect の Python クライアント (SPARK-39375)
  • テーブルのカラムに対する DEFAULT 値のサポートの実装 (SPARK-38334)
  • TIMESTAMP WITHOUT TIME ZONE データ型のサポート (SPARK-35662)
  • 「Lateral Column Alias References」のサポート (SPARK-27561)
  • エラークラスに対する SQLSTATE 使用の強化 (SPARK-41994)
  • Bloom filter Joins をデフォルトで有効化 (SPARK-38841)
  • 大規模アプリケーションに対する Spark UI のスケーラビリティと Driver の安定性の向上 (SPARK-41053)
  • Structured Streaming における非同期進捗追跡 (SPARK-39591)
  • Structured Streaming における Python の任意のステートフル処理 (SPARK-40434)
  • Pandas API カバレッジの向上 (SPARK-42882) と PySpark における NumPy 入力サポート (SPARK-39405)
  • PySpark ユーザー定義関数用のメモリプロファイラの実装 (SPARK-40281)
  • PyTorch Distributor の実装 (SPARK-41589)
  • SBOM アーティファクトの公開 (SPARK-41893)
  • IPv6 のみ環境のサポート (SPARK-39457)
  • カスタマイズされた K8s スケジューラ (Apache YuniKorn および Volcano) の GA (SPARK-42802)

Spark SQL

機能

  • テーブルのカラムに対する DEFAULT 値のサポートの実装 (SPARK-38334)
  • Dataset.as(StructType) の追加 (SPARK-39625)
  • パラメータ化された SQL のサポート (SPARK-41271, SPARK-42702)
  • unpivot / melt の追加 (SPARK-38864, SPARK-39876)
  • 「lateral column alias references」のサポート (SPARK-27561)
  • result offset 句のサポート (SPARK-28330, SPARK-39159)
  • Timestamp without time zone データ型のサポート (SPARK-35662)
  • time travel におけるスカラーサブクエリのサポート (SPARK-39306)
  • Catalog API を 3層ネームスペースと互換性を持たせる (SPARK-39235)
  • Dataframe オプションを使用した TimeTravel のための秒単位のタイムスタンプのサポート (SPARK-39633)
  • SparkSession.config(Map) の追加 (SPARK-40163)
  • セッションカタログのデフォルトデータベースの変更サポート (SPARK-35242)
  • Spark 用の Protobuf サポート - from_protobuf および to_protobuf (SPARK-40654)
  • MERGE INTO への WHEN NOT MATCHED BY SOURCE 句の追加 (SPARK-40921)
  • CREATE TABLE カラムオプションの順序制約の緩和 (SPARK-40944)
  • Dataframe overwrite コマンドの SQL 相当 (SPARK-40956)
  • 外部参照をホストするための、必須の子出力がない Generate のサポート (SPARK-41441)
  • ORDER BY ALL (SPARK-41637)
  • GROUP BY ALL (SPARK-41635)
  • flatMapSortedGroups および cogroupSorted の追加 (SPARK-38591)
  • 相関非等価述語を持つサブクエリのサポート (SPARK-36114)
  • UNION/INTERSECT/EXCEPT を介した相関を持つサブクエリのサポート (SPARK-36124)

ANSI 準拠

  • ANSI SQL モード: マップカラムへの無効なアクセス時に常に NULL を返す (SPARK-40066)
  • ダブルクォーテーション付き識別子のサポート (SPARK-40585)
  • ANSI SQL モード: Round/Bround は整数オーバーフロー時にエラーを返す (SPARK-42045)
  • 整数から ANSI interval へのキャストのサポート (SPARK-40008)
  • Decimal から ANSI interval へのキャストのサポート (SPARK-40014)
  • パーセンタイル関数からより広い ANSI interval 型を返す (SPARK-40151)
  • ANSI interval から Decimal へのキャストのサポート (SPARK-39470)
  • ANSI モードでの interval から整数へのキャストのサポート (SPARK-39451)
  • エラークラスに対する SQLSTATE 使用の強化 (SPARK-41994)

関数

  • FROM 句でのテーブル値生成関数 (table-valued generator functions) のサポート (SPARK-41594)
  • ANSI 集計関数: REGR_SXY のサポート (SPARK-37681)
  • ANSI 集計関数: REGR_R2 のサポート (SPARK-37641)
  • ANSI 集計関数: REGR_SXX のサポート (SPARK-37672)
  • ANSI 集計関数: REGR_SYY のサポート (SPARK-37702)
  • ANSI 集計関数: REGR_SLOPE のサポート (SPARK-39230)
  • ANSI 集計関数: REGR_INTERCEPT のサポート (SPARK-37623)
  • ANSI 集計関数 PERCENTILE_CONT をウィンドウ関数としてサポート (SPARK-38219)
  • ANSI 集計関数: PERCENTILE_DISC のサポート (SPARK-37691)
  • SPLIT_PART 関数のサポート (SPARK-38063)
  • TRY_AVG 関数のサポート (SPARK-38589)
  • TRY_TO_BINARY 関数のサポート (SPARK-38590)
  • 新しい仕様に基づいた TO_NUMBER および TRY_TO_NUMBER SQL 関数のサポート (SPARK-38796)
  • ANSI 一般値指定および関数 - USER のサポート (SPARK-39138)
  • Decimal 値を文字列にフォーマットするための TO_CHAR および TRY_TO_CHAR 関数のサポート (SPARK-28516)
  • ANY_VALUE 集計関数のサポート (SPARK-39213)
  • EQUAL_NUL 関数のサポート (SPARK-39305)
  • 集計関数 MEDIAN のサポート (SPARK-39320)
  • REGEXP_COUNT 関数のサポート (SPARK-39618)
  • REGEXP_INSTR 関数のサポート (SPARK-39744)
  • REGEXP_SUBSTR 関数のサポート (SPARK-39695)
  • UNPIVOT 関数のサポート (SPARK-39876)
  • TRY_TO_TIMESTAMP 関数のサポート (SPARK-39795)
  • URL エンコード/デコードを組み込み関数としてサポートし、URL 関連関数を整理 (SPARK-39741)
  • 集計関数 MODE のサポート (SPARK-39808)
  • GET 関数のサポート (SPARK-40109)
  • 関数エイリアスの追加: LEN, DATEPART, DATEADD, DATE_DIFF, CURDATE (SPARK-40352)
  • TO_BINARY 関数の改善 (SPARK-40112)
  • CURRENT_SCHEMA のサポート (SPARK-41323)
  • データマスキング組み込み関数 MASK のサポート (SPARK-40687)
  • 高次関数: ARRAY_COMPACT のサポート (SPARK-41235)
  • ARRAY_APPEND 関数のサポート (SPARK-41232)
  • ARRAY_INSERT 関数のサポート (SPARK-41234)
  • LUHN_CHECK 関数のサポート (SPARK-42191)
  • ARRAY_SORT(column, comparator) のサポート (SPARK-39925)

データソース

  • DS v2 でのカラム統計のサポート (SPARK-41378)
  • DS v2 での Storage Partitioned Join (SPJ) (SPARK-37375)
  • DS v2 での行レベル操作 (SPARK-35801)
  • DS v2 Scan の SupportsReportOrdering mix-in インターフェースの追加 (SPARK-38647)
  • CSV スキーマ推論のための DATE 型の推論 (SPARK-39469)
  • DS v2 カスタムメトリック API での Driver メトリックのサポート (SPARK-39635)
  • 書き込み時の DS v2 関数の分散および順序付けサポート (SPARK-39607)
  • Parquet への StringEndsWith/Contains のプッシュダウンサポートにより、辞書フィルタを活用可能に (SPARK-39002)
  • Spark Parquet ベクトル化リーダーでの UDT のサポート (SPARK-39086)
  • Parquet ファイルの行インデックスをサポートするための METADATA カラムの拡張 (SPARK-37980)
  • parquet FIXED_LEN_BYTE_ARRAY 型の読み取りサポート (SPARK-41096)
  • フィルタリング述語の順序の最適化 (SPARK-40045)
  • MSSQL JDBC での CTE および一時テーブルクエリのサポート (SPARK-37259)
  • データソースオプションでの ignoreCorruptFiles および ignoreMissingFiles のサポート (SPARK-38767)
  • v1 書き込みを WriteFiles に分離 (SPARK-41407)
  • 外部データファイルをカバーするための読み取り側 char パディングの追加 (SPARK-40697)

クエリ最適化

  • 非相関スカラーサブクエリのマージ (SPARK-34079)
  • Bloom filter Joins をデフォルトで有効化 (SPARK-38841)
  • distinctKeys による集計式での不要な distinct の削除 (SPARK-38832)
  • 重複排除された CTE に対する述語プッシュダウンおよびカラムプルーニングのサポート (SPARK-37670)
  • ストリーム側で集計関数が重複に依存しない場合、外部結合を削除 (SPARK-38886)
  • 左/右外部結合の左/右側カラムのみが選択され、反対側の結合キーが一意である場合、左/右外部結合を削除 (SPARK-39172)
  • グローバル Sort を RepartitionByExpression に最適化 (SPARK-39911)
  • TransposeWindow ルールの最適化 (SPARK-38034)
  • EliminateSorts を強化し、LocalLimit によるソートの削除をサポート (SPARK-40050)
  • 結合条件が空の場合、ローカル制限を両側にプッシュダウン (SPARK-40040)
  • Optimizer のための PushProjectionThroughLimit の追加 (SPARK-40501)
  • PIVOT/UNPIVOT を結合子とともにサポート (SPARK-41195)
  • 複数の非決定性フィルタでのカラムプルーニングのサポート (SPARK-41017)
  • AQE キャッシュによる出力パーティション分割と順序付けの改善 (SPARK-41048)
  • バランスの取れた式ツリー述語を作成することにより、multi like パフォーマンスを改善 (SPARK-41167)
  • RepartitionByExpression の子である Sort を削除 (SPARK-36703)
  • 完了したクエリステージから利用可能なカラム統計を使用 (SPARK-39991)
  • WindowSpecDefinition での式の再利用 (SPARK-41805)
  • AliasAwareOutputPartitioning および AliasAwareQueryOutputOrdering を改善し、すべてのエイリアスを考慮 (SPARK-40086, SPARK-42049)
  • Python UDF を通じた Limit のプッシュダウン (SPARK-42115)

コード生成とクエリ実行

  • BroadcastNestedLoopJoinExec の defaultJoin を並列実行可能に (SPARK-40487)
  • HiveGenericUDF の Codegen サポート (SPARK-42051)
  • SinglePartition でのシャッフルの導入 (SPARK-41986)
  • DPP が Union を持つプルーニング側をサポートするようにする (SPARK-39217)

その他の注目すべき変更点

  • 自動パーティション統計収集のサポート (SPARK-38573)
  • Thrift Server でのエラーメッセージのフォーマット (SPARK-40098)
  • キャッシングのためのプラン正規化を行う拡張 API の追加 (SPARK-41183)
  • 物理型を導入することによる Spark 型のリファクタリング (SPARK-41226)
  • OneOf フィールドサポートと再帰チェック (SPARK-41396)
  • カラム解決ロジックの一元化 (SPARK-41405)
  • プラン変更検証の改善 (SPARK-42081)
  • 型安全のための SparkPath の導入 (SPARK-41970)
  • Dataset API による一時ビュー作成時の db_name.view_name に対する例外スロー (SPARK-41090)
  • Mask 関数の引数のデフォルト値を -1 から NULL に変更 (SPARK-42070)

Spark Core

廃止

  • シャッフルデータが移行された場合、廃止された executor が失われた際の不要なタスク再実行の回避 (SPARK-41469)
  • 廃止された executor によるステージフェッチ失敗の無視 (SPARK-40481)
  • spark.storage.decommission.(rdd shuffle)Blocks.enabled をデフォルトで有効化 (SPARK-40198)
  • ESS が無効な場合の YARN 廃止サポートの追加 (SPARK-30835)

スケジューラ

  • ステージスケジューリングがローカルクラスターモードをサポートするようにする (SPARK-41949)
  • スタンドアロンクラスターで動的割り当てが無効な場合のステージレベルタスクリソースプロファイルのサポート (SPARK-39853)
  • Driver が ExecutorExitCode を受信できるように onDisconnected を遅延させる (SPARK-39957)
  • ステージタスクメトリックによる投機的実行の改善 (SPARK-32170)
  • スタンドアロンクラスターのためのステージレベルリソーススケジューリングサポートの追加 (SPARK-39062)
  • LaunchTask メッセージの送信失敗によるステージ失敗を回避するための LaunchTask プロセスの改善 (SPARK-39955)

シャッフル

  • プッシュベースシャッフルのクライアント側読み取りメトリックの追加 (SPARK-36620)
  • プッシュベースシャッフルのシャッフルサーバー側メトリック (​​SPARK-33573)
  • db クローズ前に mergedShuffleCleaner がシャットダウンされていることを確認 (SPARK-40186)
  • シャッフルサービス状態ストアのための RocksDB サポートの追加 (SPARK-38888)
  • リモート/外部シャッフル状態を格納するために使用される LevelDB を DB としてカプセル化 (SPARK-38909)
  • spark.dynamicAllocation.shuffleTracking.enabled をデフォルトで有効化 (SPARK-3984)
  • ワークプリザービング再起動のために、NM レベル DB に状態を格納するプッシュベースシャッフルサービスを有効化 (SPARK-33236)
  • 解放された executor のためのシャッフルサービスを使用したシャッフルブロックの削除 (SPARK-37618)

その他の注目すべき変更点

  • IPv6 のみ環境のサポート (SPARK-39457)
  • spark.kryo.unsafe をデフォルトで有効化 (SPARK-42137)
  • クラスターモードでのプロキシユーザーによる任意のカスタムクラスパスの禁止 (SPARK-41958)
  • executor が失われた場合、BlockManager の再登録を回避 (SPARK-41360)
  • 単一タスクの結果が 2GB に収まらなければならないという制限の削除 (SPARK-40622)
  • 非推奨の spark.akka.* 設定のサポートの削除 (SPARK-40401)
  • log4j の動作と一致させるために、デフォルトのロギングを stderr に変更 (SPARK-40406)
  • 結果サイズの計算時に DirectTaskResult メタデータを除外 (SPARK-40261)
  • take() の動作における初期パーティション番号のカスタマイズを許可 (SPARK-40211)
  • Executor.updateDependencies() で同期ではなく割り込み可能なロックを使用 (SPARK-40235)
  • タスク失敗は常にタスク失敗リスナーをトリガーする必要がある (SPARK-40106)
  • 監視またはポーリングを選択的に無効にする機能の追加 (SPARK-36462)
  • ドライバー上で非シリアライズされたブロードキャストリレーションをキャッシュしない (SPARK-39983)
  • TaskMemoryManager と UnsafeExternalSorter.SpillableIterator 間のデッドロックの修正 (SPARK-39283)
  • ステージのパーティション数を TaskContext に公開 (SPARK-38679)
  • メモリオーバーヘッド係数を設定可能に (SPARK-38194)
  • ShellBasedGroupsMappingProvider で bash -c の使用を回避 (SPARK-38992)

Structured Streaming

主要機能

  • 非同期進捗追跡 (SPARK-39591)
  • Structured Streaming における Python の任意のステートフル処理 (SPARK-40434)
  • Structured Streaming における Protobuf サポート (SPARK-40653)
  • 遅延レコードフィルタリングをステートフル演算子の連鎖をサポートするように修正 (SPARK-40925)

その他の注目すべき変更点

  • Hadoop の Abortable インターフェースに基づくストリーミングチェックポイントファイルマネージャーの導入 (SPARK-40039)
  • Trigger.Once を非推奨とし、Trigger.AvailableNow を昇格 (SPARK-39805)
  • ストリーミングクエリの論理プランにカタログテーブルの情報を公開 (SPARK-39564)
  • ストリーミングシンクからのメトリック収集のサポート (SPARK-38564)
  • DStream API の非推奨化 (SPARK-42075)
  • Kafka オフセット取得設定のデフォルト値を変更 (SPARK-40844)
  • PySpark の foreachBatch シンクのユーザー関数で DataFrame 内のクローンされた Spark セッションを提供する (SPARK-41379)

Spark Connect

Python クライアント

Scala クライアント

PySpark

Pandas API on Spark

その他の注目すべき変更点

  • 大規模な改善
    • PySpark ユーザー定義関数用のメモリプロファイラの実装 (SPARK-40281)
    • Catalog API を 3層ネームスペースと互換性を持たせる (SPARK-39235)
    • PySpark における NumPy 入力サポート (SPARK-39405)
    • PySpark エラーの改善 (SPARK-41597)
  • 主要機能
    • PySpark におけるパラメータ化された SQL のサポート (SPARK-41666)
    • ‘median’ 関数の実装 (SPARK-40003)
    • ‘mode’ 関数の実装 (SPARK-40007)
    • ‘unpivot/melt’ 関数の実装 (SPARK-39877)
    • PySpark における Varchar のサポート (SPARK-39760)
    • PySpark における CharType のサポート (SPARK-39809)

MLLIB

SparkR

ライブ UI および履歴サーバーサービス

  • 大規模アプリケーションに対する Spark UI のスケーラビリティと Driver の安定性の向上(SPARK-41053)
  • spark.history.store.hybridStore.diskBackend として RocksDB をデフォルトで使用 (SPARK-42277)
  • ネストされた実行をルート実行の下にグループ化 (SPARK-41752)
  • 環境タブでのメトリックプロパティの表示 (SPARK-39110)
  • StagePage の入力サイズ/レコードがゼロより大きい場合に表示されない問題を修正 (SPARK-34777)
  • Json4s の代わりに Jackson を使用してイベントロギング JsonProtocol のパフォーマンスを改善 (SPARK-39489)
  • spark.history.fs.update.batchSize のサポート (SPARK-39225)

ビルド

クレジット

最後に、このリリースは以下の貢献者なしでは不可能でした: Abhishek Dixit, Abu Bakr Siddiq, Adam Binford, Ahmed Mahran, Aimilios Tsouvelekakis, Ait Zeouay Amrane, Aki Sukegawa, Ala Luszczak, Alex Balikov, Alkis Evlogimenos, Allan Folting, Allison Portis, Allison Wang, Andrew Ray, Andy Grove, Andy Lam, Anish Shrigondekar, Ankit Prakash Gupta, Anton Ippolitov, Anton Okolnychyi, Aravind Patnam, Artsiom Yudovin, Arvin Zheng, Attila Zsolt Piros, Austin Wang, Ben Zhang, Bjorn Jorgensen, Bjørn Jørgensen, Bo Zhang, Bobby Wang, Brandon Dahler, Brennan Stein, Brian Schaefer, Brian Yue, Bruce Robbins, Carmen Kwan, Chandni Singh, Chao Sun, Chaoqin Li, Cheng Pan, Cheng Su, Chenhao Li, Chris Nauroth, Daniel Davies, Daniel Fiterman, Daniel Ranchal Parrado, Daniel Tenedorio, David Lewis, Dch Nguyen, Deepyaman Datta, Dennis Huo, Deshan Xiao, Desmond Cheong, Dongjoon Hyun, Dustin William Smith, ELHoussineT, Emil Ejbyfeldt, Enrico Minack, Erik Krogen, Eugene-Mark, Frank Yin, Fred Liu, Fredrik Mile, Fu Chen, Furcy Pin, Gabor Roczei, Gautham Banasandra, Gengliang Wang, Gidon Gershinsky, Guangxin Wang, Haejoon Lee, Hai Tao, Herman Van Hovell, Hisoka-X, Holden Karau, Huanli Wang, Hui An, Hyukjin Kwon, Immanuel Buder, Ismaël Mejía, Ivan Sadikov, Jack Chen, Jatin Sharma, Jeffrey Chen, Jelmer Kuperus, Jerry Peng, Jiaan Geng, JiexingLi, Johan Lasperas, John Caveman, John Zhuge, Jonathan Cui, Josh Rosen, Jove Yuan, Juliusz Sompolski, Jungtaek Lim, Kai-Hsun Chen, Kapil Kumar Singh, Karen Feng, Karuppayya Rajendran, Kazuaki Ishizaki, Kazuyuki Tanimura, Kelvin Jiang, Kent Yao, Keunhyun Oh, Khaled Hammouda, Khalid Mammadov, Kian Eliasi, Kimahriman, Kris Mok, Kumar, Pralabh, Kun Wan, Lee Yang, Liang-Chi Hsieh, Lingyun Yuan, Linhong Liu, Lorenzo Martini, LorenzoMartini, Luca Canali, Maciej Szymkiewicz, Manu Zhang, Mark Khaitman, Martin Grund, Martin Tzvetanov Grigorov, Maryann Xue, Max Gekk, Maya Anderson, Minchu Yang, Mridul Muralidharan, NarekDW, Nicholas Chammas, Niranjan Jayakar, Ole Sasse, Oleksiy Dyagilev, PJ Fanning, Peter Toth, Prashant Singh, Raghu Angadi, Rakesh Raushan, Reynold Xin, Rithwik Ediga Lakhamsani, Robert (Bobby) Evans, Rui Wang, Ruifeng Zheng, Runyao Chen, Ryan Johnson, Sandeep Katta, Sandeep Singh, SandishKumarHN, Santosh Pingale, Sean Owen, Serge Rielau, Shaoyun Chen, Shardul Mahadik, Shiqi Sun, Shixiong Zhu, Shrikant Prasad, Shuyou Dong, Stefaan Lippens, Steve Loughran, Steven Aerts, Sumeet Gajjar, Supun Nakandala, Swaminathan Balachandran, Takuya Ueshin, Tanel Kiis, Ted Yu, Tengfei Huang, Thejdeep Gudivada, Tobias Stadler, Tom Van Bussel, Tristan Nixon, Venki Korukanti, Vinod KC, Vitalii Li, Vivek Atal, Warren Zhu, Wei Liu, Weichen Xu, Weiwei Yang, Wenchen Fan, Wenli Looi, Wilfred Spiegelenburg, William Hyun, William Zijie, WolverineJiang, Xiduo You, Xing Lin, Xingbo Jiang, Xingchao, Zhang, Xinrong Meng, Xinyi Yu, XiuLi Wei, Yan Wei, Yang Jie, Yaohua628, Ye Zhou, Yi Wu, Yi Zhu, Yikf, Yikun Jiang, Yubi Lee, Yuming Wang, Zach Schuermann, Zhen Li, Zhen Wang, Zhiming She, Ziqi Liu, awdavidson, beobest2, bjornjorgensen, bzhaoopenstack, carlfu-db, cashmand, chenzhx, constzhou, dcoliversun, dengziming, fanyilun, fred-db, ganeshchand, gaoyajun02, guanziyue, harupy, huangxiaopingRD, huaxingao, idealspark, jackylee-ch, jiang13021, jiaoqingbo, khalidmammadov, kuwii, leesf, lvshaokang, lw33, mattshma, mcdull-zhang, minyyy, moritzkoerber, morvenhuang, mridulm, nyingping, panbingkun, philwalk, pralabhkumar, qiuliang988, santosh-d3vpl3x, seunggabi, smallzhongfeng, sus, thyecust, toujours33, uchiiii, utkarsh39, vicennial, wangshengjie123, wankunde, wayneguow, wecharyu, weiyuyilia, wineternity, wzx140, xiaonanyang-db, xiuzhu9527, yabola, yikf, zekai-li, zhangbutao, zheniantoushipashi, zhixingheyi-tian, zhouyifan279, zwangsheng, zzzzming95


Spark ニュースアーカイブ