Spark Release 3.5.0

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

このリリースでは、Spark Connect の一般提供(Scala および Go クライアント、分散トレーニングおよび推論サポート)、Structured Streaming の互換性強化など、さらに多くのシナリオが導入されました。また、SQL IDENTIFIER 句、SQL 関数呼び出しの名前付き引数サポート、HyperLogLog 近似集計の SQL 関数サポート、Python ユーザー定義テーブル関数などの新しい PySpark および SQL 機能が導入されました。DeepSpeed を使用した分散トレーニングが簡素化され、演算子間のウォーターマーク伝播、Structured Streaming における dropDuplicatesWithinWatermark 操作が導入されました。

Apache Spark 3.5.0 をダウンロードするには、ダウンロードページをご覧ください。詳細な変更点については JIRA を参照してください。主要なモジュール別にグループ化された、ハイレベルな変更点のリストもこちらにまとめています。

ハイライト

  • Spark Connect における Scala および Go クライアントサポート SPARK-42554 SPARK-43351
  • Spark Connect 向けの PyTorch ベース分散 ML サポート SPARK-42471
  • Python および Scala における Spark Connect の Structured Streaming サポート SPARK-42938
  • Python Spark Connect クライアント向けの Pandas API サポート SPARK-42497
  • Arrow Python UDF の導入 SPARK-40307
  • Python ユーザー定義テーブル関数のサポート SPARK-43798
  • PySpark エラーのエラークラスへの移行 SPARK-42986
  • PySpark テストフレームワーク SPARK-44042
  • Datasketches HllSketch のサポート追加 SPARK-16484
  • 組み込み SQL 関数の機能強化 SPARK-41231
  • IDENTIFIER 句 SPARK-43205
  • Scala、Python、R API への SQL 関数の追加 SPARK-43907
  • SQL 関数への名前付き引数サポートの追加 SPARK-43922
  • シャフルデータが移行された場合に、非推奨になったエグゼキューターの喪失による不要なタスク再実行の回避 SPARK-41469
  • 分散 ML <> Spark Connect SPARK-42471
  • DeepSpeed Distributor SPARK-44264
  • RocksDB ステートストアの変更ログチェックポイントの実装 SPARK-43421
  • 演算子間のウォーターマーク伝播の導入 SPARK-42376
  • dropDuplicatesWithinWatermark の導入 SPARK-42931
  • RocksDB ステートストアプロバイダのメモリ管理の強化 SPARK-43311

Spark Connect

  • sql モジュールの sql および sql-api へのリファクタリングにより、Scala Spark Connect クライアントと Spark 間で共有可能な最小限の依存関係セットを生成し、Spark の推移的な依存関係すべてをプルすることを回避します。SPARK-44273
  • Spark Connect の Scala クライアントの導入 SPARK-42554
  • Python Spark Connect クライアント向けの Pandas API サポート SPARK-42497
  • Spark Connect 向けの PyTorch ベース分散 ML サポート SPARK-42471
  • Python および Scala における Spark Connect の Structured Streaming サポート SPARK-42938
  • Go クライアントの初期バージョン SPARK-43351
  • Python および Scala の Spark ネイティブと Spark Connect クライアント間の互換性に関する多くの改善
  • クライアントアプリケーションのデバッグ可能性とリクエスト処理の向上(非同期処理、リトライ、長時間クエリ)

Spark SQL

機能

  • メタデータ列ファイルブロックの開始と長さの追加 SPARK-42423
  • Scala/Java sql() での位置パラメータをサポート SPARK-44066
  • 関数呼び出しのパーサーへの名前付きパラメータサポートの追加 SPARK-43922
  • INSERT ソースリレーションに対する ORDER BY、LIMIT、OFFSET を伴う SELECT DEFAULT のサポート SPARK-43071
  • TVF 呼び出しに対する TABLE 引数の後に PARTITION BY および ORDER BY 句の SQL 文法を追加 SPARK-44503
  • DESCRIBE および SHOW CREATE TABLE 出力への列デフォルト値の包含 SPARK-42123
  • Catalog.listCatalogs のためのオプションパターンを追加 SPARK-43792
  • Catalog.listDatabases のためのオプションパターンを追加 SPARK-43881
  • 実行準備完了時のコールバック SPARK-44145
  • 名前による INSERT ステートメントのサポート SPARK-42750
  • Scala API のための call_function を追加 SPARK-44131
  • 安定した派生列エイリアス SPARK-40822
  • CREATE/REPLACE TABLE OPTIONS 値としての一般的な定数式のサポート SPARK-43529
  • INTERSECT/EXCEPT を介した相関を持つサブクエリのサポート SPARK-36124
  • IDENTIFIER 句 SPARK-43205
  • ANSI モード: 内部変換がオーバーフローした場合、Conv はエラーを返す必要があります SPARK-42427

関数

  • Datasketches HllSketch のサポート追加 SPARK-16484
  • aes_encrypt()/aes_decrypt() による CBC モードのサポート SPARK-43038
  • TableValuedFunction のための TABLE 引数パーサー ルールのサポート SPARK-44200
  • ビットマップ関数の実装 SPARK-44154
  • try_aes_decrypt() 関数の追加 SPARK-42701
  • array_insert は 0 インデックスで失敗するはずです SPARK-43011
  • to_varchar を to_char のエイリアスとして追加 SPARK-43815
  • 高階関数: array_compact の実装 SPARK-41235
  • 組み込み関数に対する名前付き引数のアナライザーサポートの追加 SPARK-44059
  • ターゲットテーブルよりも列数が少ないユーザー指定リストを持つ INSERT で NULL を追加 SPARK-42521
  • aes_encrypt IV および AAD のサポートを追加 SPARK-43290
  • DECODE 関数は NULL が渡された場合に間違った結果を返します SPARK-41668
  • UDF ‘luhn_check’ のサポート SPARK-42191
  • Aggregate における暗黙的な横断列エイリアス解決のサポート SPARK-41631
  • Window を使用したクエリにおける暗黙的な横断列エイリアスのサポート SPARK-42217
  • 3 引数関数エイリアス DATE_ADD および DATE_DIFF の追加 SPARK-43492

データソース

  • JDBC カタログの Char/Varchar サポート SPARK-42904
  • JDBC API および TVF 経由で SQL キーワードを動的に取得するサポート SPARK-43119
  • DataSource V2: delta ベースのソースに対する MERGE コマンドの処理 SPARK-43885
  • DataSource V2: グループベースのソースに対する MERGE コマンドの処理 SPARK-43963
  • DataSource V2: グループベースのソースに対する UPDATE コマンドの処理 SPARK-43975
  • DataSource V2: UPDATE をDELETE および INSERT として表現することを許可 SPARK-43775
  • JDBC ダイアレクトがテーブル作成に使用するクエリをオーバーライドすることを許可 SPARK-41516
  • SPJ: 部分的にクラスター化された分布のサポート SPARK-42038
  • DSv2 は CTAS/RTAS がスキーマの null 可能性を予約することを許可します SPARK-43390
  • spark.sql.files.maxPartitionNum を追加 SPARK-44021
  • delta ベースのソースに対する UPDATE コマンドの処理 SPARK-43324
  • V2 書き込みがアドバイザリシャフルパーティションサイズを示せるようにする SPARK-42779
  • Parquet の lz4raw 圧縮コーデックのサポートを追加 SPARK-43273
  • Avro: 複雑なユニオンの書き込み SPARK-25050
  • JSON/CSV データソースでタイムスタンプ型推論をユーザー提供フォーマットで高速化 SPARK-39280
  • Avro が Long バックのカスタム Decimal 型をサポートするようにする SPARK-43901
  • パーティションキーが一致しないが、結合式が互換性のある場合に、Storage-Partitioned Join でのシャフルを回避 SPARK-41413
  • CSV フォーマットでバイナリをサポートされないデータ型に変更 SPARK-42237
  • Avro がユニオン型を SQL に、フィールド名を型に対して安定した状態で変換できるようにする SPARK-43333
  • JSON/CSV データソースでタイムスタンプ型推論をレガシーフォーマットで高速化 SPARK-39281

クエリ最適化

  • サブ式削除によるショートカット式のサポート SPARK-42815
  • 片側が一意性を維持できる場合、結合統計推定を改善 SPARK-39851
  • トップ k 計算を最適化するために、ランクベースのフィルターの Window のグループ制限を導入 SPARK-37099
  • 最適化ルールにおける null IN (空リスト) の動作を修正 SPARK-44431
  • partitionSpec が空の場合、Window を通じて limit を推測およびプッシュダウン SPARK-41171
  • すべての集計関数が異なる場合、外部結合を削除 SPARK-42583
  • サブクエリで、同じ partition/order を持つ隣接する 2 つの Window を折りたたむ SPARK-42525
  • Python UDF を介した limit のプッシュダウン SPARK-42115
  • フィルタリング述語の順序を最適化 SPARK-40045

コード生成とクエリ実行

  • ランタイムフィルターは、フィルター作成側としてマルチレベルシャフル結合側をサポートする必要があります SPARK-41674
  • HiveSimpleUDF の Codegen サポート SPARK-42052
  • HiveGenericUDF の Codegen サポート SPARK-42051
  • ビルドサイド外部シャフルハッシュ結合の Codegen サポート SPARK-44060
  • to_csv 関数(StructsToCsv)のコード生成の実装 SPARK-42169
  • AQE が InMemoryTableScanExec をサポートするようにする SPARK-42101
  • 左外部結合ビルド左または右外部結合ビルド右をシャフルハッシュ結合でサポート SPARK-36612
  • CTAS/RTAS で RequiresDistributionAndOrdering を尊重する SPARK-43088
  • ブロードキャスト結合ストリーム側で適用される結合におけるバケットの合体 SPARK-43107
  • USING 結合のフル外部結合キーの null 可能性を正しく設定する SPARK-44251
  • IN サブクエリ ListQuery の null 可能性を修正 SPARK-43413

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

  • USING 結合のキーの null 可能性を正しく設定する SPARK-43718
  • 相関スカラーサブクエリにおける COUNT(*) が null になるバグを修正 SPARK-43156
  • Dataframe.joinWith 外部結合は、一致しない行に対して null 値を返す必要があります SPARK-37829
  • 競合するメタデータ列を自動的に名前変更 SPARK-42683
  • Spark SQL エラークラスをユーザー向けドキュメントに記載 SPARK-42706

PySpark

機能

  • Python sql() での位置パラメータをサポート SPARK-44140
  • sql() によるパラメーター化された SQL のサポート SPARK-41666
  • Python ユーザー定義テーブル関数のサポート SPARK-43797
  • 実行時にワーカーで UDF および pandas 関数 API の Python 実行可能ファイルを設定するサポート SPARK-43574
  • DataFrame.offset を PySpark に追加 SPARK-43213
  • pyspark.sql.dataframe.DataFrame に dir() を実装して列を含める SPARK-43270
  • Arrow UDF 操作用に大きな可変幅ベクトルを使用するオプションを追加 SPARK-39979
  • mapInPandas / mapInArrow でバリアモード実行をサポート SPARK-42896
  • PySpark SparkContext に JobTag API を追加 SPARK-44194
  • Python UDTF が Python で分析できるようにするサポート SPARK-44380
  • pyspark.sql.types に TimestampNTZType を公開 SPARK-43759
  • ネストされたタイムスタンプ型のサポート SPARK-43545
  • pandas DataFrame からの createDataFrame および toPandas で UserDefinedType をサポート [SPARK-43817]SPARK-43702
  • Pyspark Protobuf API に descriptor バイナリオプションを追加 SPARK-43799
  • Pandas UDF の型ヒントとしてジェネリックタプルを受け入れる SPARK-43886
  • array_prepend 関数を追加 SPARK-41233
  • assertDataFrameEqual ユーティリティ関数を追加 SPARK-44061
  • Arrow 最適化 Python UDTF のサポート SPARK-43964
  • FP 近似等価性のためのカスタム精度を許可 SPARK-44217
  • assertSchemaEqual API を公開 SPARK-44216
  • ps.Series の fill_value をサポート SPARK-42094
  • pandas DataFrame からの DataFrame 作成で構造体型をサポート SPARK-43473

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

  • pyspark.sql.dataframe.DataFrame の df[ ] のオートコンプリートサポートを追加 [SPARK-43892]
  • Pandas 2.0 で削除される API を非推奨および削除 [SPARK-42593]
  • コード例の最初のタブとして Python を使用 - Spark SQL、DataFrames、および Datasets ガイド SPARK-42493
  • 残りの Spark ドキュメントのコード例をデフォルトで Python を表示するように更新 SPARK-42642
  • Arrow RecordBatch 作成時の重複解除されたフィールド名を使用 [SPARK-41971]
  • pandas DataFrame を使用した createDataFrame で重複したフィールド名をサポート [SPARK-43528]
  • Series を使用した DataFrame 作成時に columns パラメータを許可 [SPARK-42194]

コア

  • タスクが実行されていない場合でも、シャフルMapStage のリトライ時に mergeFinalize をスケジュールする SPARK-40082
  • SQL 演算子実行のための PartitionEvaluator を導入 SPARK-43061
  • ShuffleDriverComponent がシャフルデータが確実に保存されているかどうかを宣言できるようにする SPARK-42689
  • 無限リトライを回避するために、ステージの最大試行回数制限を追加 SPARK-42577
  • 静的 Spark Conf を使用したログレベル構成のサポート SPARK-43782
  • PercentileHeap を最適化 SPARK-42528
  • TaskScheduler.cancelTasks に reason 引数を追加 SPARK-42602
  • シャフルデータが移行された場合に、非推奨になったエグゼキューターの喪失による不要なタスク再実行の回避 SPARK-41469
  • RDD キャッシュによるリトライタスクの場合のアキュムレータの過少カウントの修正 SPARK-41497
  • spark.history.store.hybridStore.diskBackend のデフォルトとして RocksDB を使用 SPARK-42277
  • spark.kubernetes.setSubmitTimeInDriver をサポート SPARK-43014
  • Guava Cache の NonFateSharingCache ラッパー SPARK-43300
  • MapOutputTracker.updateMapOutput のパフォーマンスを改善 SPARK-43043
  • External Shuffle Service によってメタデータが DB に保存されるかどうかをアプリケーションが制御できるようにする SPARK-43179
  • YARN 上の Spark から K8s へのエグゼキューター障害トラッカーをポート SPARK-41210
  • KubernetesExecutorBackend でのドライバープロパティフェッチャーの最大試行回数をパラメータ化 SPARK-42764
  • エグゼキューターポッドに SPARK_DRIVER_POD_IP 環境変数を追加 SPARK-42769
  • エグゼキューターポッドに Hadoop 設定マップをマウント SPARK-43504

Structured Streaming

  • RocksDB ステートストアのピン留めブロックメモリ使用状況の追跡をサポート SPARK-43120
  • RocksDB ステートストアプロバイダのメモリ管理の強化を追加 SPARK-43311
  • dropDuplicatesWithinWatermark の導入 SPARK-42931
  • StreamingQueryListener に新しいコールバック onQueryIdle() を追加 SPARK-43183
  • DSv2 ソース/シンクの StreamingWrite API の一部としてコミットコーディネーターをスキップするオプションを追加 SPARK-42968
  • StreamingQueryListener に新しいコールバック「onQueryIdle」を導入 SPARK-43183
  • RocksDB ステートストアプロバイダーの変更ログベースのチェックポイントの実装 SPARK-43421
  • ストリーミングステートフル演算で使用される RocksDB の WRITE_FLUSH_BYTES のサポートを追加 SPARK-42792
  • ストリーミングで使用される RocksDB の max_write_buffer_number および write_buffer_size を設定するサポートを追加 SPARK-42819
  • RocksDB StateStore のロック取得は、inputRDD から入力イテレータを取得した後に実行される必要があります SPARK-42566
  • 演算子間のウォーターマーク伝播の導入 SPARK-42376
  • RocksDB チェックポイントディレクトリの孤立した sst およびログファイルをクリーンアップ SPARK-42353
  • QueryTerminatedEvent を拡張して、例外にエラークラスが存在する場合にそれを格納する SPARK-43482

ML

  • Deepspeed を使用した関数の分散トレーニングのサポート SPARK-44264
  • sparkML の spark3.5 向け基本インターフェース: estimator/transformer/model/evaluator SPARK-43516
  • MLv2(Spark Connect 上の ML)が pandas >= 2.0 をサポートするようにする SPARK-43783
  • MLv2 Transformer インターフェースの更新 SPARK-43516
  • Distributor 上に実装された新しい PySpark ML ロジスティック回帰推定器 SPARK-43097
  • Classifier.getNumClasses を元に戻す SPARK-42526
  • DeepspeedTorchDistributor という Deepspeed 分散学習クラスを記述 SPARK-44264
  • Spark Connect 上の ML の基本的な保存/読み込み実装 SPARK-43981
  • ロジスティック回帰モデルの保存を改善 SPARK-43097
  • Spark Connect 上の ML のためのパイプライン推定器の実装 SPARK-43982
  • クロスバリデーター推定器の実装 SPARK-43983
  • 分類評価器の実装 SPARK-44250
  • PyTorch Distributor を Spark Connect と互換性のあるものにする SPARK-42993

UI

  • Spark Connect 用の Spark UI ページを追加 SPARK-44394
  • エグゼキュータータブにヒープヒストグラム列をサポート SPARK-44153
  • 各失敗したクエリの UI にエラーメッセージを表示 SPARK-44367
  • エグゼキュータータブにエグゼキューターの追加/削除時間を表示 SPARK-44309

ビルドおよびその他

削除、動作変更、非推奨

今後の削除

次の Spark メジャーリリースで削除される機能:

  • Java 8 および Java 11 のサポート。最小サポート Java バージョンは Java 17 になります。
  • Scala 2.12 のサポート。最小サポート Scala バージョンは 2.13 になります。

移行ガイド

クレジット

最後に、このリリースは、以下の貢献者なしでは実現できませんでした: Adam Binford, Ahmed Hussein, Alex Jing, Alice Sayutina, Alkis Evlogimenos, Allan Folting, Allison Portis, Allison Wang, Amanda Liu, Andrey Gubichev, Andy Grove, Anish Shrigondekar, Anton Okolnychyi, Bartosz Konieczny, Beishao Cao, Bjørn Jørgensen, Bo Zhang, Bruce Robbins, Chandni Singh, Chao Sun, Chaoqin Li, Cheng Pan, Christopher Cooper, Christopher Watford, ConeyLiu, Daniel Sparing, Daniel Tenedorio, David Lewis, Dongjoon Hyun, Emil Ejbyfeldt, Enrico Minack, Eric Marnadi, Eric Ogren, Erik Krogen, Eugene Gusev, Fei Wang, Fokko Driesprong, Frank Yin, Fu Chen, Gene Pang, Gengliang Wang, Gera Shegalov, Giambattista Bloisi, Guilhem Vuillier, Gurpreet Singh, Haejoon Lee, Harsh Motwani, Henry Mai, Herman Van Hovell, Hisoka-X, Holden Karau, Huanli Wang, Hyukjin Kwon, Ismaël Mejía, Ivan Sadikov, Jack Chen, James Lamb, Jason Li, Jerry Peng, Jia Fan, Jiaan Geng, JinHelin404, Joe Wang, Johan Lasperas, John Zhuge, Josh Rosen, Juliusz Sompolski, Jungtaek Lim, Kazuyuki Tanimura, Kent Yao, Khalid Mammadov, Koray Beyaz, Kris Mok, Kun Wan, Kwafoor, Lee Yang, Leibnizhu, Liang Yan, Liang-Chi Hsieh, Lingkai Kong, Luca Canali, Ludovic Henry, Manu Zhang, Martin Grund, Mathew Jacob, Max Gekk, Menelaos Karavelas, Michael Chen, Michael Zhang, Mingkang Li, Mridul Muralidharan, NarekDW, Navin Viswanath, Niranjan Jayakar, Ole Sasse, Parth Upadhyay, Peter Toth, Qi Tan, Raghu Angadi, Richard Yu, Ritika Maheshwari, Rob Reeves, Robert Dillitz, Rui Wang, Ruifeng Zheng, Runyao Chen, Ryan Berti, Ryan Johnson, Serge Rielau, Serge Smertin, Sergii Druzkin, Shaoyun Chen, Shreyesh Shaju Arangath, Shrikant Prasad, Shu Wang, Siying Dong, Steve Vaughan Jr, Steve Weis, Steven Aerts, Steven Chen, Stove-hust, Szehon Ho, Takuya UESHIN, Tengfei Huang, Terry Kim, Thejdeep Gudivada, Thomas Graves, Tim Nieradzik, Venki Korukanti, Vihang Karajgaonkar, Vinod KC, Vitalii Li, Vsevolod Stepanov, Wanqiang Ji, Warren Zhu, Wei Liu, Weichen Xu, Wen Yuen Pang, Wenchen Fan, Willi Raschkowski, William Hyun, Xiduo You, Xieming LI, Xingbo Jiang, Xinrong Meng, Xinyi Yu, Yang Jie, Yi Zhu, Yihong He, Yikf, Yikun Jiang, Yiqun Zhang, Yohahaha, Yuanjian Li, Yuming Wang, Zhen Li, Ziqi Liu, advancedxy, alexanderwu-db, amousavigourabi, bjornjorgensen, bogao007, bowenliang123, caican00, chong0929, clownxc, frankliee, haoyanzhang, hdaly0, huangxiaopingRD, jdesjean, jerqi, jwang0306, khalidmammadov, kings129, kylerong-db, liangyu-1, lucaspompeun, mcdull-zhang, panbingkun, pegasas, pengzhon-db, ronandoolan2, smallzhongfeng, srielau, stijndehaes, sudoliyang, ted-jenks, tianhanhu, vicennial, wForget, wayne-kyungwonpark, wayneguow, yabola, zeruibao, zhouyifan279, zml1206, zzzzming95


Spark ニュースアーカイブ