Spark Release 3.3.2

Spark 3.3.2 は、安定性修正を含むメンテナンスリリースです。このリリースは Spark の branch-3.3 maintenance branch に基づいています。すべての 3.3 ユーザーは、この安定版リリースへのアップグレードを強く推奨します。

主な変更点

  • [SPARK-38697]: SparkSessionExtensions を拡張して AQE Optimizer にルールを注入する
  • [SPARK-40872]: プッシュマージされたシャフルチャンクがゼロサイズのときに元のシャフルブロックにフォールバックする
  • [SPARK-41388]: getReusablePVCs は、前のバッチで最近作成された PVC を無視すべきである
  • [SPARK-42071]: scala.math.Ordering$Reverse を KyroSerializer に登録する
  • [SPARK-32380]: sparksql は、データが hbase にある場合に hive テーブルにアクセスできない
  • [SPARK-39404]: getBatch が DataFrame の複数の論理ノードを返す場合、ストリーミングで _metadata をクエリできない
  • [SPARK-40493]: 「[SPARK-33861][SQL] Predicate の条件を単純化する」を元に戻す
  • [SPARK-40588]: パーティション書き込みと AQE がオンの場合のソートの問題
  • [SPARK-40817]: Kubernetes 上の Spark のクラスタモードで spark.jars URI が無視される
  • [SPARK-40819]: Parquet INT64 (TIMESTAMP(NANOS,true)) は、自動的に LongType に変換されるのではなく、Illegal Parquet type をスローするようになる
  • [SPARK-40829]: CREATE TABLE LIKE view の STORED AS serde が機能しない
  • [SPARK-40851]: 最新の Java 8/11/17 を使用したときの TimestampFormatter の動作変更
  • [SPARK-40869]: KubernetesConf.getResourceNamePrefix が無効な名前プレフィックスを作成する
  • [SPARK-40874]: 暗号化が有効な場合の Python UDF でのブロードキャストを修正する
  • [SPARK-40902]: テストで Mesos スケジューラにドライバを迅速に送信すると、ドライバがドロップされる
  • [SPARK-40918]: _metadata を使用する場合の ParquetFileFormat と FileSourceScanExec の列数における不一致
  • [SPARK-40924]: Unhex 関数が、入力に奇数個のシンボルがある場合に正しく機能しない
  • [SPARK-40932]: Barrier: allGather のメッセージは、後続の barrier API によって上書きされる
  • [SPARK-40963]: ExtractGenerator が新しい Project で不正確な null 値を設定する
  • [SPARK-40987]: ブロックを削除する際にディレクトリを作成しないようにして、DAGScheduler が機能しない問題を回避する
  • [SPARK-41035]: リテラルが異なる集計間で再利用される場合、不正確な結果または NPE が発生する
  • [SPARK-41118]: format が null の場合、to_number/try_to_number が NullPointerException をスローする
  • [SPARK-41144]: UnresolvedHint はクエリの失敗を引き起こすべきではない
  • [SPARK-41151]: 組み込みファイル _metadata 列の null 値の一貫性を維持する
  • [SPARK-41154]: time travel spec を持つクエリのリレーションキャッシングが不正確
  • [SPARK-41162]: Anti-join は、曖昧な述語を持つ集計の下にプッシュされるべきではない
  • [SPARK-41187]: [Core] ExecutorLost が発生した場合の AppStatusListener での LiveExecutor MemoryLeak
  • [SPARK-41188]: spark executor JVM プロセスの executorEnv OMP_NUM_THREADS をデフォルトで spark.task.cpus に設定する
  • [SPARK-41254]: YarnAllocator.rpIdToYarnResource マップが正しく更新されない
  • [SPARK-41327]: On/OffHeapStorageMemory 情報を切り替えることで SparkStatusTracker.getExecutorInfos を修正する
  • [SPARK-41339]: RocksDB state store の WriteBatch がネイティブメモリをクリーンアップしない
  • [SPARK-41350]: サブクエリエイリアス後の join 非表示列の単純名アクセスを許可する
  • [SPARK-41365]: 一部の yarn バージョンでプロキシ用の Stages UI ページがロードに失敗する
  • [SPARK-41375]: 空の latest KafkaSourceOffset を回避する
  • [SPARK-41376]: Executor netty direct memory check は spark.shuffle.io.preferDirectBufs を尊重すべきである
  • [SPARK-41379]: PySpark の foreachBatch sink のユーザー関数での DataFrame の spark session の不整合
  • [SPARK-41385]: K8s モジュールで非推奨の .newInstance() を置き換える
  • [SPARK-41395]: InterpretedMutableProjection は、decimal データと共に使用されると unsafe buffer を破損させる可能性がある
  • [SPARK-41448]: FileBatchWriter と FileFormatWriter で MR job ID を一貫させる
  • [SPARK-41458]: Yarn Shuffle Service の SPI サービスを正しく変換する
  • [SPARK-41468]: EquivalentExpressions での PlanExpression の処理を修正する
  • [SPARK-41522]: GA dependencies テストが失敗した
  • [SPARK-41535]: InterpretedUnsafeProjection と InterpretedMutableProjection は、calendar interval データと共に使用されると unsafe buffer を破損させる可能性がある
  • [SPARK-41554]: Decimal.changePrecision が ArrayIndexOutOfBoundsException を生成する
  • [SPARK-41668]: DECODE 関数が NULL を渡された場合に誤った結果を返す
  • [SPARK-41732]: Session window: 解析ルール「SessionWindowing」がツリーパターンベースのプルーニングを適用しない
  • [SPARK-41989]: PYARROW_IGNORE_TIMEZONE 警告がアプリケーションのロギング設定を破損する可能性がある
  • [SPARK-42084]: qualified-access-only 制限の漏洩を回避する
  • [SPARK-42090]: RetryingBlockTransferor に sasl リトライ回数を導入する
  • [SPARK-42134]: 参照属性のないフィルターを処理するために getPartitionFiltersAndDataFilters() を修正する
  • [SPARK-42157]: spark.scheduler.mode=FAIR は FAIR スケジューラを提供するべきである
  • [SPARK-42176]: boolean を timestamp にキャストすると ClassCastException が発生する
  • [SPARK-42188]: SBT protobuf バージョンを branch 3.2 および 3.3 の Maven と一致させる
  • [SPARK-42201]: build/sbt は SBT_OPTS が JVM メモリ設定を上書きできるようにすべきである
  • [SPARK-42222]: Spark 3.3 バックポート: SPARK-41344 V2 データソースの読み込みが基底エラーをマスクする
  • [SPARK-42259]: ResolveGroupingAnalytics は Python UDAF を処理すべきである
  • [SPARK-42344]: CONFIG_MAP_MAXSIZE のデフォルトサイズは 1048576 より大きくすべきではない
  • [SPARK-42346]: UNION ALL を使用した distinct(count colname) がクエリアナライザーのバグを引き起こす
  • [SPARK-38277]: RocksDB state store のコミット後に write batch をクリアする
  • [SPARK-40913]: pytest==7.1.3 にピン留めする
  • [SPARK-41089]: Netty native arm64 libs をリロケートする
  • [SPARK-41360]: エグゼキュータが失われた場合、BlockManager の再登録を回避する
  • [SPARK-41476]: README.md が CI をトリガーしないようにする
  • [SPARK-41541]: SQLShuffleWriteMetricsReporter.decRecordsWritten() での誤った child 呼び出しを修正する
  • [SPARK-41962]: SpecificParquetRecordReaderBase クラスの scala パッケージの import 順序を更新する
  • [SPARK-42230]: 変更されていない PySpark および SparkR ドキュメントをスキップすることで lint ジョブを改善する
  • [SPARK-41863]: コマンドが利用できない場合、flake8 テストをスキップする
  • [SPARK-41864]: mypy linter エラーを修正する
  • [SPARK-42110]: ParquetDeltaEncodingSuite.random data test での繰り返し回数を減らす
  • [SPARK-41415]: SASL リクエスト リトライ
  • [SPARK-41538]: メタデータ列はプロジェクトリストの末尾に追加されるべきである
  • [SPARK-40983]: Parquet 圧縮コーデックの zstd に関する Hadoop 要件を削除する
  • [SPARK-41185]: ドキュメントから YuniKorn の ARM 制限を削除する

  • [SPARK-35542]: 修正: 複数の列に対して splitsArray、inputCols、outputCols パラメータで作成された Bucketizer は、保存後にロードできない
  • [SPARK-36057]: SPIP: カスタマイズされた Kubernetes スケジューラをサポートする
  • [SPARK-38034]: TransposeWindow ルールを最適化する
  • [SPARK-38404]: ネストされた CTE が外部 CTE を参照する場合の CTE 解決を改善する
  • [SPARK-38614]: percent_rank を使用するウィンドウを越える limit のプッシュダウンをしない
  • [SPARK-38717]: Hive の bucket spec のケースを保持するように処理する
  • [SPARK-38796]: to_number および try_to_number 関数を更新して、正の数での PR を許可する
  • [SPARK-39184]: 日付およびタイムスタンプシーケンスでアンダーサイズの結果配列を処理する
  • [SPARK-39200]: Fallback Storage が content に対して readFully するようにする
  • [SPARK-39340]: DS v2 agg プッシュダウンは、トップレベル列の名前にドットを許可するべきである
  • [SPARK-39355]: 単一列が引用符を使用して UnresolvedAttribute を構築する
  • [SPARK-39419]: コンパレータが null を返す場合に ArraySort が例外をスローするように修正する
  • [SPARK-39447]: AdaptiveSparkPlanExec.doExecuteBroadcast での AssertionError を回避する
  • [SPARK-39476]: Long から Float/Double へのキャスト、または Integer から Float へのキャストの場合に Unwrap cast 最適化を無効にする
  • [SPARK-39548]: ウィンドウ句クエリを持つ CreateView コマンドが、見つからないウィンドウ定義の問題にヒットする
  • [SPARK-39570]: インラインテーブルはエイリアス付きの式を許可するべきである
  • [SPARK-39614]: K8s ポッド名は DNS サブドメイン名規則に従う
  • [SPARK-39633]: DataFrame オプションを使用した TimeTravel の秒単位のタイムスタンプをサポートする
  • [SPARK-39647]: BlockManager を登録する前に ESS でエグゼキュータを登録する
  • [SPARK-39650]: ストリーミング重複排除における誤った値スキーマを後方互換性で修正する
  • [SPARK-39656]: DescribeNamespaceExec の誤った名前空間を修正する
  • [SPARK-39657]: YARN AM クライアントは非静的 setTokensConf メソッドを呼び出すべきである
  • [SPARK-39672]: 相関サブクエリを持つフィルターの前にプロジェクトを削除するように修正する
  • [SPARK-39758]: 無効なパターンに対する regexp 関数からの NPE を修正する
  • [SPARK-39775]: Avro スキーマの解析時にデフォルト値の検証を無効にする
  • [SPARK-39806]: パーティション分割されたテーブルの _metadata へのアクセスがクエリをクラッシュさせる可能性がある
  • [SPARK-39833]: 重複するパーティション列とデータ列の場合の正確性の問題を修正するために、Parquet の列インデックスを DSv1 で無効にする
  • [SPARK-39835]: EliminateSorts がローカルソートの下のグローバルソートを削除するように修正する
  • [SPARK-39839]: UnsafeRow の構造的一貫性チェックで、オフセットとサイズがゼロの特殊なケースの null 変長 Decimal を処理する
  • [SPARK-39847]: caller スレッドが中断された場合に RocksDBLoader.loadLibrary() での競合状態を修正する
  • [SPARK-39857]: V2ExpressionBuilder が In 述語に対して誤った LiteralValue データ型を使用する
  • [SPARK-39867]: グローバル limit は OrderPreservingUnaryNode を継承すべきではない
  • [SPARK-39887]: RemoveRedundantAliases は、Projection ノードの出力を一意にするエイリアスを保持すべきである
  • [SPARK-39896]: In/InSet のリテラルのダウンキャストが失敗した場合に UnwrapCastInBinaryComparison が機能するようにする
  • [SPARK-39900]: バイナリ形式の述語プッシュダウンにおける部分的または否定された条件に対処する
  • [SPARK-39911]: グローバル Sort を RepartitionByExpression に最適化する
  • [SPARK-39915]: Dataset.repartition(N) は N パーティションを作成しない可能性がある (非 AQE 部分)
  • [SPARK-39915]: AQE で出力パーティションがユーザー指定されていることを確認する
  • [SPARK-39932]: WindowExec は最終的なパーティションバッファをクリアすべきである
  • [SPARK-39951]: ネストされたフィールドに対する Parquet V2 列チェックを更新する
  • [SPARK-39952]: SaveIntoDataSourceCommand は結果リレーションを再キャッシュすべきである
  • [SPARK-39962]: グループ属性が空の場合に投影を適用する
  • [SPARK-39976]: ArrayIntersect は左側の式に null がある場合に正しく処理すべきである
  • [SPARK-40002]: ntile を使用するウィンドウを越える limit のプッシュダウンをしない
  • [SPARK-40065]: 非デフォルトプロファイルのエグゼキュータにも ConfigMap をマウントする
  • [SPARK-40079]: Imputer の inputCols 検証を空の入力ケースに対して追加する
  • [SPARK-40089]: 一部の Decimal 型のソートを修正する
  • [SPARK-40117]: DataFrameWriterV2.overwrite で条件を java に変換する
  • [SPARK-40121]: Python UDF に使用される投影を初期化する
  • [SPARK-40132]: MultilayerPerceptronClassifier.setParams に rawPredictionCol を復元する
  • [SPARK-40149]: Project を介してメタデータ列を伝播する
  • [SPARK-40152]: split_part codegen コンパイル問題を修正する
  • [SPARK-40169]: データスキーマへの参照がない Parquet フィルターのプッシュダウンをしない
  • [SPARK-40212]: SparkSQL castPartValue が byte、short、float を正しく処理しない
  • [SPARK-40213]: ラテン語 1 文字の ASCII 値変換をサポートする
  • [SPARK-40218]: GROUPING SETS はグルーピング列を保持すべきである
  • [SPARK-40228]: child が低コストな式でない場合、multiLike を単純化しない
  • [SPARK-40247]: BitSet 等価性チェックを修正する
  • [SPARK-40280]: 注釈付き int および long に対する Parquet プッシュダウンのサポートを追加する
  • [SPARK-40297]: CTE のメインボディにネストされた CTE の外部参照を解決できない
  • [SPARK-40362]: BinaryComparison の正規化を修正する
  • [SPARK-40380]: InvokeLike の定数畳み込みを修正して、プランに埋め込まれたシリアル化不可能なリテラルを回避する
  • [SPARK-40385]: companion object constructor の解釈パスを修正する
  • [SPARK-40389]: キャストがオーバーフローする可能性がある場合、Decimal は整数型にアップキャストできない
  • [SPARK-40468]: _corrupt_record が選択されている場合の CSV の列プルーニングを修正する
  • [SPARK-40508]: 未知のパーティションを UnknownPartitioning として扱う
  • [SPARK-40535]: AggregatingAccumulator のバッファが入力行が空の場合に作成されないバグを修正する
  • [SPARK-40562]: spark.sql.legacy.groupingIdWithAppendedUserGroupBy を追加する
  • [SPARK-40612]: YARN 以外のリソースマネージャーでの委任トークン更新に使用されるプリンシパルを修正する
  • [SPARK-40660]: 要素を分散するために XORShiftRandom に切り替える
  • [SPARK-40703]: 並列処理を改善するために SinglePartition でのシャフルを導入する

依存関係の変更

メンテナンスリリースですが、このリリースではいくつかの依存関係をアップグレードしました。それらは以下の通りです。

詳細な変更については、JIRA を参照してください: detailed changes

このリリースにパッチを提供してくださったすべてのコミュニティメンバーに感謝いたします。


Spark ニュースアーカイブ