Spark Release 3.2.0

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

このリリースでは、SparkはSpark上のPandas APIレイヤーをサポートします。Pandasユーザーは、コードを1行変更するだけで、Spark上でアプリケーションをスケールアウトできます。その他の主なアップデートには、RocksDB StateStoreのサポート、セッションウィンドウのサポート、プッシュベースのシャッフルサポート、ANSI SQL INTERVAL型、Adaptive Query Execution (AQE) のデフォルト有効化、ANSI SQLモードのGAが含まれます。

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

ハイライト

  • PySpark 上の Pandas API レイヤーをサポート (SPARK-34849)
  • Adaptive Query Execution をデフォルトで有効化 (SPARK-33679)
  • シャッフル効率を改善するためにプッシュベースのシャッフルをサポート (SPARK-30602)
  • RocksDB StateStore 実装を追加 (SPARK-34198)
  • EventTime ベースのセッション化 (セッションウィンドウ) (SPARK-10816)
  • ANSI SQL モード GA (SPARK-35030)
  • ANSI SQL INTERVAL 型のサポート (SPARK-27790)
  • クエリコンパイルレイテンシの削減 (SPARK-35042, SPARK-35103, SPARK-34989)
  • Scala 2.13 をサポート (SPARK-34218)

Core および Spark SQL

ANSI SQL 互換性強化

  • ANSI SQL INTERVAL 型のサポート (SPARK-27790)
  • ANSI モードでの新しい型変換構文ルール (SPARK-34246)
  • LATERAL サブクエリをサポート (SPARK-34382)
  • ANSI モード: IntegralDivide がオーバーフロー時に例外をスロー (SPARK-35152)
  • ANSI モード: Average のオーバーフローチェック (SPARK-35955)
  • Block count(table.*) が ANSI 標準およびその他の SQL エンジンに準拠 (SPARK-34199)
  • (IGNORE RESPECT) NULLS for LEAD/LAG/NTH_VALUE/FIRST_VALUE/LAST_VALUE のサポート (SPARK-30789)

パフォーマンス

  • クエリコンパイルレイテンシ
    • transform/resolve 関数とその呼び出しサイトでのトラバーサルプルーニングをサポート (SPARK-35042)
    • mapChildren および withNewChildren メソッドのパフォーマンスを改善 (SPARK-34989)
    • 型変換ルールのパフォーマンスを改善 (SPARK-35103)
  • クエリ最適化
    • Optimizer で冗長な集計を削除 (SPARK-33122)
    • Project with Join を介した LIMIT のプッシュダウン (SPARK-34622)
    • LEFT SEMI および LEFT ANTI join の LIMIT プッシュダウン (SPARK-36404, SPARK-34514)
    • パーティション仕様が空の場合に WINDOW を介した LIMIT のプッシュダウン (SPARK-34575)
    • CBO で相対コスト比較関数を使用 (SPARK-34922)
    • union, sort, および range オペレータのカーディナリティ推定 (SPARK-33411)
    • join をブロードキャスト join として計画できる場合にのみ LeftSemi/LeftAnti を Aggregate の上にプッシュダウン (SPARK-34081)
    • UnwrapCastInBinaryComparison で In/InSet 述語をサポート (SPARK-35316)
    • 共通部分式除去の強化 (SPARK-35448)
    • パーティションプルーニング後に必要な統計情報を保持 (SPARK-34119)
    • バケットフィルタプルーニングとバケットテーブルスキャンの分離 (SPARK-32985)
  • クエリ実行
    • Adaptive Query Execution
      • Adaptive Query Execution をデフォルトで有効化 (SPARK-33679)
      • AQE で Dynamic Partition Pruning (DPP) をサポート (join が最初にブロードキャストハッシュ join である場合、または再利用されたブロードキャスト交換がない場合) (SPARK-34168, SPARK-35710)
      • シャッフルパーティションの統合前にスキュー join を最適化 (SPARK-35447)
      • AQE サイドシャッフルハッシュ join 式をルールでサポート (SPARK-35282)
      • AQE サイドブロードキャストハッシュ join の閾値をサポート (SPARK-35264)
      • AQE コスト評価のためのカスタムプラグインを許可 (SPARK-35794)
    • Zstandard バッファプールをデフォルトで有効化 (SPARK-34340, SPARK-34390)
    • すべての join 型のソートマージ join のためのコード生成を追加 (SPARK-34705)
    • フルプラン交換とサブクエリの再利用 (SPARK-29375)
    • ブロードキャストネストドループ join の改善 (SPARK-34706)
    • 動的パーティションとバケットテーブルの書き込みのための同時書き込みを許可 (SPARK-26164)
    • Spark Thrift サーバーでの FETCH_PRIOR 処理のパフォーマンスを改善 (SPARK-33655)

コネクタの強化

  • Parquet
    • 使用している Apache Parquet をバージョン 1.12.1 にアップグレード (SPARK-36726)
    • Parquet ベクトル化リーダーの列インデックスをサポート (SPARK-34289)
    • 読み取り時の日時リベーシングを制御するための新しい Parquet データソースオプションを追加 (SPARK-34377)
    • Parquet の int32 物理型として格納されている Parquet の符号なし型を読み取る (SPARK-34817)
    • Parquet の signed int64 物理型として格納されている Parquet の unsigned int64 論理型を decimal(20, 0) として読み取る (SPARK-34786)
    • ベクトル化 Parquet リーダー使用時の列インデックスの処理 (SPARK-34859)
    • Parquet IN フィルタプッシュダウンを改善 (SPARK-32792)
  • ORC
    • 使用している Apache ORC をバージョン 1.6.11 にアップグレード (SPARK-36482)
    • Apache ORC 強制位置進化をサポート (SPARK-32864)
    • ORC ベクトル化リーダーのネストされた列をサポート (SPARK-34862)
    • ORC データソースで ZSTD、LZ4 圧縮をサポート (SPARK-33978, SPARK-35612)
    • ORC データの読み取りを削減するために、タスク構成で読み取る列のリストを設定 (SPARK-35783)
  • Avro
    • 使用している Apache Avro をバージョン 1.10.2 にアップグレード (SPARK-34778)
    • 「avro.schema.literal」を持つパーティショニングされた Hive テーブルの Avro スキーマ進化をサポート (SPARK-26836)
    • 読み取り時の日時リベーシングを制御するための新しい Avro データソースオプションを追加 (SPARK-34404)
    • Avro でユーザー提供スキーマ URL をサポート (SPARK-34416)
    • 位置合わせされた Catalyst-Avro スキーママッチングをサポート (SPARK-34365)
  • JSON
    • 使用している Jackson をバージョン 2.12.3 にアップグレード (SPARK-35550)
    • JSON データソースが非 ASCII 文字をコードポイントとして書き込めるようにする (SPARK-35047)
  • CSV
    • univocity-parsers を 2.9.1 にアップグレード (SPARK-33940)
  • JDBC
    • JDBC SQL TIME 型を TimestampType にマップし、タイムゾーンに関係なく時刻部分を固定 (SPARK-34357)
    • JDBCRelation でより正確なパーティションストライドを計算 (SPARK-34843)
    • JDBC データソースで refreshKrb5Config オプションをサポート (SPARK-35226)
  • Hive Metastore で NOT IN によるフィルタリングをサポート (SPARK-34538)

Kubernetes 強化

  • Kubernetes クライアントを 5.4.1 にアップグレード (SPARK-35660)
  • spark.kubernetes.executor.disableConfigMap をサポート (SPARK-34316)
  • リモートテンプレートファイルをサポート (SPARK-34783)
  • 保留中の POD の制限を導入 (SPARK-36052)
  • 再利用された PVC でのシャッフルデータリカバリをサポート (SPARK-35593)
  • アプリ終了時の早期ドライバースイートクリーンアップをサポート (SPARK-35131)
  • エグゼキューター開始前のドライバ準備タイムアウト用の設定を追加 (SPARK-32975)
  • ドライバ所有のオンデマンド PVC をサポート (SPARK-35182)
  • 最大デコミッション時間 & 除外対象のデコミッションを許可 (SPARK-34104)
  • トークンのみで k8s へのサブミットをサポート (SPARK-33720)
  • カスタム機能ステップ用の開発者 API を追加 (SPARK-33261)

Data Source V2 API

  • 集計プッシュダウン API (SPARK-34952)
  • FunctionCatalog API (SPARK-27658)
  • DataSourceV2 Function Catalog 実装 (SPARK-35260)
  • 書き込み時の分散と順序付けを要求する API を追加 (SPARK-33779)
  • 書き込みのための必要なソートとクラスタリングを渡すインターフェースを追加 (SPARK-23889)
  • Datasource v2 スキャンからのメトリクスをサポート (SPARK-34338)
  • 書き込みパスでのメトリクスをサポート (SPARK-36030)
  • 書き込み時の分散と順序付けに必要な静的パーティション数をサポート (SPARK-34255)
  • 動的フィルタリングをサポート (SPARK-35779)
  • LocalScan をサポート (SPARK-35535)
  • MERGE … UPDATE/INSERT * は名前解決を行うべき (SPARK-34720)

機能強化

  • サブクエリの改善
    • 相関サブクエリの改善 (SPARK-35553)
    • 非集計単一行相関スカラーサブクエリを許可 (SPARK-28379)
    • サブクエリが集計されている場合、相関等価述語のサブセットのみを許可 (SPARK-35080)
    • 外部クエリプランを使用してサブクエリ内のスター式を解決 (SPARK-35618)
  • 新しい組み込み関数
  • デフォルトで Apache Hadoop 3.3.1 を使用 (SPARK-29250)
  • ユーザー定義型 (UDT) API を公開 (SPARK-7768)
  • シャッフルブロックのチェックサムを追加 (SPARK-35275)
  • spark.storage.replication.proactive をデフォルトで有効化 (SPARK-33870)
  • テーブル関数レジストリを追加 (SPARK-34678)
  • SparkContext 停止時のフォールバックストレージクリーンアップをサポート (SPARK-34142)
  • Scala Dataset API から Java enum をサポート (SPARK-23862)
  • ADD JAR with ivy coordinates は Hive の推移的な動作と互換性があるべき (SPARK-34506)
  • ADD ARCHIVE および LIST ARCHIVES コマンドをサポート (SPARK-34603)
  • ADD FILE/JAR/ARCHIVE コマンドの複数パスをサポート (SPARK-35105)
  • CREATE FUNCTION USING 構文のリソースとしてアーカイブファイルをサポート (SPARK-35236)
  • ServiceLoader から SparkSessionExtensions をロード (SPARK-35380)
  • functions.{scala,py} に sentences 関数を追加 (SPARK-35418)
  • decode 関数の機能を、主要なデータベースと一貫性があるように拡張 (SPARK-33527)
  • パーティション管理に Hive metastore を使用する非 Hive テーブルに spark.sql.hive.metastorePartitionPruning を適用 (SPARK-36128)
  • NULL 列を持つテーブルの作成をサポート (SPARK-36241)
  • 非決定的な With-CTE のインライン化を回避 (SPARK-36447)
  • 特定のデータベース内のすべてのテーブルの分析をサポート (SPARK-33687)
  • Spark で例外メッセージを標準化 (SPARK-33539)

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

  • 監視
    • ExternalShuffleService の新しいメトリクス (SPARK-35258)
    • ステージレベルの REST API およびパラメータを追加 (SPARK-26399)
    • REST API でのタスクおよびエグゼキューターメトリクス分布をサポート (SPARK-34488)
    • ハッシュ集計のフォールバックメトリクスを追加 (SPARK-35529, SPARK-34237)
    • エグゼキューター損失の理由を Web UI に伝搬 (SPARK-34764)
  • Dataset#summary のオプションとして count_distinct を追加 (SPARK-34165)
  • SQL 例外に SQLSTATE および ERRORCODE を導入 (SPARK-34920)
  • sql/core で ScriptTransform を実装 (SPARK-31936)
  • v1 テーブルをリフレッシュ中に依存関係をキャッシュしたままにする (SPARK-34138)
  • BlockManagerMaster ドライバハートビートタイムアウトを設定可能に (SPARK-34278)
  • io.file.buffer.size が spark.buffer.size によって設定されるが、hive-site.xml のロードによって意図せず上書きされ、パフォーマンス低下を引き起こす可能性 (SPARK-34346)
  • リモートスケジューラプールファイルをサポート (SPARK-35083)
  • クライアント側でシャービス名を設定可能にし、サーバー側でクラスパスベースの設定オーバーライドを許可 (SPARK-34828)
  • ExecutorMetricsPoller は、ハートビートが発生するまで stageTCMP のステージエントリを保持するべき (SPARK-34779)
  • RewriteDistinctAggregates で if を filter 句に置き換え (SPARK-34882)
  • CREATE TABLE LIKE は予約済みテーブルプロパティを尊重するべき (SPARK-34935)
  • 構造体の配列から大文字小文字を区別しない構造体フィールドを抽出するためのネストされた列プルーニングを修正 (SPARK-34963)
  • YARN クラスターモードで ivySettings ファイルをドライバに送信 (SPARK-34472)
  • USING/NATURAL JOIN からの重複共通列を解決 (SPARK-34527)
  • Invoke は正しい数のパラメータを持つメソッドを見つけるべき (SPARK-35278)
  • 集計関数なしで集計式からグルーピング式を最適化しない (SPARK-34581)
  • distribute/cluster by/repartition ヒントの不足している属性の解決をサポート (SPARK-35331)
  • 欠落している設定を推測することで s3a magic committer サポートを改善 (SPARK-35383)
  • 宛先ディレクトリが存在しないことによるファイルリネーム失敗を回避 (SPARK-35106)
  • BlockManagerMasterEndpoint は、更新中にインデックスのみのシャッフルファイルを無視しないべき (SPARK-35589)
  • Set コマンドの結果で機密情報を赤化 (SPARK-35576)
  • 長尺 JSON を受け入れられるようにステートスキーマを更新 (SPARK-35602)
  • STRUCT データ型定義の 「:」 をオプションにすることを検討 (SPARK-35706)
  • View は RelationConversions で使用される設定をキャプチャしないべき (SPARK-35792)
  • null 埋め付き unionByName のために、新しいネストされた struct フィールドをソートするのではなく追加 (SPARK-35290)
  • NullType の型名として Void を使用 (SPARK-36224)

Structured Streaming

メジャー機能

  • RocksDB StateStore 実装を追加 (SPARK-34198)
  • EventTime ベースのセッション化 (セッションウィンドウ) (SPARK-10816)
  • Kafka クライアントを 2.8.0 にアップグレード (SPARK-33913)

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

  • Structured Streaming の flatMapGroupsWithState でユーザー定義初期状態をサポート (SPARK-35896)
  • バッチモードで flatMapGroupsWithState の初期状態をサポート (SPARK-36132)
  • Kafka データソースの開始オフセットタイムスタンプのオフセット不一致戦略を導入 (SPARK-35611)
  • Kafka ソースに、トリガーごとに読み取る最小レコード数を指定する新しいオプションを導入 (SPARK-35312)
  • StreamingQueryProgress でステートフルオペレータのより詳細なメトリクスを含める (SPARK-35896)
  • ソースメトリクスをプログレスレポート経由で公開し、Kafka ユースケースに遅延レポートを追加 (SPARK-34854)
  • FileStreamSink のメタデータディレクトリを無視するための設定を追加 (SPARK-35565)
  • ソースプログレスに最新オフセットを含める (SPARK-33955)

PySpark

Project Zen

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

  • ピン留めスレッドモードをデフォルトで有効化 (SPARK-35303)
  • Arrow 実行に NullType サポートを追加 (SPARK-33489)
  • toPandas に Arrow self_destruct サポートを追加 (SPARK-32953)
  • PySpark ピン留めスレッドモード用のスレッドターゲットラッパー API を追加 (SPARK-35498)

MLlib

パフォーマンス改善

  • BucketedRandomProjectionLSH transform の最適化 (SPARK-34220)
  • w2v findSynonyms の最適化 (SPARK-34189)
  • 境界チェックをスキップしてスパース GEMM を最適化 (SPARK-35707)
  • ML ALS recommendForAll のパフォーマンスを GEMV で改善 (SPARK-33518)

モデルトレーニングの改善

  • Logistic Aggregator のリファクタリング - 仮想センタリングをサポート (SPARK-34797)
  • 切片付き二項ロジスティック回帰のセンタリングをサポート (SPARK-34858, SPARK-34448)
  • 切片付き多項ロジスティック回帰のセンタリングをサポート (SPARK-34860)

BLAS 改善

  • com.github.fommil.netlib を dev.ludovic.netlib:2.0 に置き換え (SPARK-35295)
  • ベクトル化 BLAS 実装を追加 (SPARK-33882)
  • dev.ludovic.netlib でフォールバック BLAS を高速化 (SPARK-35150)

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

  • OVR transform で潜在的な列競合を修正 (SPARK-34356)

プログラミングガイド: Machine Learning Library (MLlib) Guide

SparkR

  • CRAN 用のキーサーバーとして keyserver.ubuntu.com を使用 (SPARK-35885)

プログラミングガイド: SparkR (R on Spark)

GraphX

  • 静的 PageRank ユーティリティによって適用される正規化をオフにできるようにする (SPARK-35357)

プログラミングガイド: GraphX Programming Guide

非推奨および削除

  • spark.launcher.childConectionTimeout を非推奨化 (SPARK-33717)
  • GROUP BY … GROUPING SETS (…) を非推奨化し、GROUP BY GROUPING SETS (…) を推奨 (SPARK-34932)
  • Spark ドキュメントで Python 3.6 を非推奨化 (SPARK-35939)
  • ps.broadcast API を非推奨化 (SPARK-35810)
  • num_files 引数を非推奨化 (SPARK-35807)
  • DataFrame.to_spark_io を非推奨化 (SPARK-35811)

既知の問題

  • I/O 暗号化でシャッフルブロックをバッチでフェッチするサポート (SPARK-34827)
  • シーケンスファイル I/O 用の Snappy コーデックのロードに失敗 (SPARK-36681)
  • 大文字のスキーマで作成されたテーブルに hive バケットテーブルを挿入できない (SPARK-35531)
  • Spark で明示的な列名なしの Hive ビューの読み取りが失敗する (SPARK-36905)
  • ピン留めスレッドモードにより、Jupyter でのジョブキャンセルが py4j エラーを引き起こす (SPARK-37004)
  • ドライバが UI で削除されたエグゼキューターを生きていると誤って報告する (SPARK-35011)

クレジット

最後になりましたが、このリリースは以下の貢献者なしでは実現できませんでした: Adam Binford, Ali Afroozeh, Alkis Polyzotis, Allison Wang, Almog Tavor, Amandeep Sharma, Ammar Al-Batool, Andrew Liu, Andy Grove, Ankur Dave, Anton Okolnychyi, Ashray Jain, Attila Zsolt Piros, Ayushi Agarwal, Baohe Zhang, Bo Zhang, Bruce Robbins, Byungsoo Oh, Carlos Peña, Cary Lee, Chandni Singh, Chao Sun, ChaoJun Zhang, Chendi Xue, Cheng Pan, Cheng Su, Chongguang LIU, Chris Thomas, Chris Wu, Daoyuan Wang, David Christle, David Li, David McWhorter, Denis Pyshev, Dereck Li, Dhruv Kumar, Dhruvil Dave, Dingyu Xu, Dominik Gehl, Dongdong Hong, Dongjoon Hyun, Dooyoung Hwang, Duc Hoa Nguyen, Emil Ejbyfeldt, Enzo Bonnal, Erik Krogen, Eugene Koifman, Fabian A.J. Thiele, Fokko Driesprong, Fu Chen, Gabor Somogyi, Gabriele Nizzoli, Gengliang Wang, Gera Shegalov, Gidon Gershinsky, Guangxin Wang, Haejoon Lee, Haiyang Sun, Han, Harsh Panchal, He Qi, Hector Zhang, Holden Karau, Hopefulnick, Huaxin Gao, Hyukjin Kwon, Ionut Boicu, Ismaël Mejía, Ivan Sadikov, Jarek Potiuk, Jason Yarbrough, Jiaan Geng, Jie Hu, Jose Torres, Josh Rosen, Josh Soref, Julien Lafaye, Jungtaek Lim, Kaifei Yi, Kamil Breguła, Karen Feng, Karuppayya Rajendran, Kazuyuki Tanimura, Ke Jia, Keerthan Vasist, Kent Yao, Kevin Pis, Kevin Su, Koert Kuipers, Kousuke Saruta, Kun Wan, Kunlun Huang, Leanken Lin, Lei Peng, Leona Yoda, Li Zhang, Liang-Chi Hsieh, Lidiya Nixon, Linhong Liu, Lipeng Zhu, Luca Canali, Ludovic Henry, Luka Sturtewagen, Lukas Rytz, Luran He, Maciej Szymkiewicz, Marios Meimaris, Maryann Xue, Matthew Powers, Max Gekk, Maya Anderson, Michael Chen, Michael Zhang, Min Shen, Minchu Yang, Mohanad Elsafty, Nicholas Marion, Ohad Raviv, Pablo Langa, Pawel Ptaszynski, Peter Toth, Phillip Henry, Prakhar Jain, Qi Liu, Qi Zhu, Qilong SU, Qingbo Jiao, Quang-Huy Nguyen, Rahul Mahadev, Raza Jafri, Richard Chen, Richard Penney, Rongchuan Jin, Rui Zeng, Ruifeng Zheng, Ryan Blue, Sajith Ariyarathna, Samuel Moseley, Sanket Reddy, Satish Gopalani, Saurabh Chawla, Sean Owen, Serge Rielau, Shahid K I, Shaoyun Chen, Shardul Mahadik, Shiqi Sun, Shixiong Zhu, Steve Loughran, Steven Aerts, Sumeet Gajjar, Swinky Mann, Takeshi Yamamuro, Takuya UESHIN, Tanel Kiis, Tathagata Das, Tengfei Huang, Terry Kim, Tianhan Hu, Tianhua Huang, Tim Armstrong, Tobias Hermann, Tom Van Bussel, Tomas Pereira De Vasconcelos, Twoentartian, Vasily Kolpakov, Venkata Krishnan Sowrirajan, Venkata Sai Akhil Gudesa, Venki Korukanti, Viettel DGD, Vinod KC, Vlad Glinsky, Walid Gara, Wan Kun, Weichen Xu, Wenchen Fan, William Hyun, Xiao Li, Xiduo You, Xingbo Jiang, Xinrong Meng, XiuLi Wei, Xuedong Luan, Yajun Gao, Yang He, Yang Jie, Yazhi Wang, Ye Zhou, Yi Wu, Yi Zhu, Yijia Cui, Yikun Jiang, Yingyi Bu, Yu Zhong, Yuanjian Li, Yuchen Huo, Yuming Wang, Yuto Akutsu, Zebing Lin, Zhang Xingchao, Zhichao Zhang


Spark ニュースアーカイブ