Spark リリース 2.3.0

Apache Spark 2.3.0 は、2.x ラインの4番目のリリースです。このリリースでは、Structured Streaming における継続処理のサポートと、まったく新しい Kubernetes スケジューラバックエンドが追加されました。その他の主なアップデートには、新しい DataSource および Structured Streaming v2 API、および PySpark のパフォーマンス強化が含まれます。さらに、このリリースは、約1400件のチケットを解決しながら、ユーザビリティ、安定性、および洗練に重点を置いています。

Apache Spark 2.3.0 をダウンロードするには、ダウンロードページをご覧ください。JIRA で詳細な変更点を確認できます。ここでは、主要モジュールごとにグループ化された、ハイレベルな変更点のリストをキュレーションしました。

コア、PySpark、および Spark SQL

  • 主要機能
    • Spark on Kubernetes: [SPARK-18278] Kubernetes によって管理されるクラスタへの Spark ジョブのネイティブサブミッションをサポートする新しい Kubernetes スケジューラバックエンド。このサポートは現在実験的であり、構成、コンテナイメージ、およびエントリポイントに関する動作の変更が予想されることに注意してください。
    • Vectorized ORC Reader: [SPARK-16060] ベクタ化により ORC スキャン スループットを大幅に向上させる (2〜5倍) 新しい ORC リーダーのサポートを追加します。リーダーを有効にするには、ユーザーは spark.sql.orc.implnative に設定できます。
    • Spark History Server V2: [SPARK-18085] より効率的なイベントストレージメカニズムを備え、大規模アプリケーションの拡張性を向上させる新しい Spark History Server (SHS) バックエンド。
    • Data source API V2: [SPARK-15689][SPARK-22386] Spark で新しいデータソースをプラグインするための実験的な API。新しい API は V1 API のいくつかの制限に対処しようとしており、高性能で保守しやすく拡張性の高い外部データソースの開発を容易にすることを目的としています。この API はまだ活発な開発段階であり、破壊的な変更が予想されることに注意してください。
    • PySpark パフォーマンス強化: [SPARK-22216][SPARK-21187] 高速なデータシリアライゼーションとベクタ化された実行による Python のパフォーマンスと相互運用性の大幅な向上。
  • パフォーマンスと安定性
    • [SPARK-21975] コストベースオプティマイザにおけるヒストグラムサポート
    • [SPARK-20331] Hive パーティションプルーニングのための述語プッシュダウンのサポート向上
    • [SPARK-19112] ZStandard 圧縮コーデックのサポート
    • [SPARK-21113] スピルリーダーにおけるディスク I/O コストを償却するためのリードアヘッド入力ストリームのサポート
    • [SPARK-22510][SPARK-22692][SPARK-21871] codegen フレームワークのさらなる安定化により、Java メソッドの 64KB JVM バイトコード制限および Java コンパイラ定数プール制限にヒットするのを回避
    • [SPARK-23207] Spark における長年のバグを修正。DataFrame 上で連続したシャッフル+再パーティショニングを行うと、特定の外科的なケースで不正な結果が生じる可能性がありました。
    • [SPARK-22062][SPARK-17788][SPARK-21907] OOM のさまざまな原因を修正
    • [SPARK-22489][SPARK-22916][SPARK-22895][SPARK-20758][SPARK-22266][SPARK-19122][SPARK-22662][SPARK-21652] ルールベースオプティマイザとプランナーの改善
  • その他の注目すべき変更

プログラミングガイド: Spark RDD プログラミングガイド および Spark SQL、DataFrames、および Datasets ガイド

Structured Streaming

  • 継続処理
    • ユーザーコードの1行を変更するだけで、ミリ秒未満のエンドツーエンドレイテンシでストリーミングクエリを実行できる新しい実行エンジン。詳細については、プログラミングガイドを参照してください。
  • ストリーム-ストリーム結合
    • 2つのデータストリームを結合し、もう一方のストリームで一致するタプルが到着するまで行をバッファリングする機能。イベントタイム列に対して述語を使用して、保持する必要のある状態の量を制限できます。
  • ストリーミング API V2
    • バッチ、マイクロバッチ、および継続的な実行で機能する新しいソースとシンクをプラグインするための実験的な API。この API はまだ活発な開発段階であり、破壊的な変更が予想されることに注意してください。

プログラミングガイド: Structured Streaming プログラミングガイド

MLlib

  • ハイライト
    • ML 予測が Structured Streaming で機能するようになり、API が更新されました。詳細は以下を参照してください。
  • 新規/改善された API
    • [SPARK-21866]: DataFrame への画像の読み込み (Scala/Java/Python) の組み込みサポート
    • [SPARK-19634]: ベクトル列に対する記述統計の DataFrame 関数 (Scala/Java)
    • [SPARK-14516]: クラスタリングアルゴリズムのチューニングのための ClusteringEvaluator。コサインシルエットと二乗ユークリッドシルエットメトリックをサポート (Scala/Java/Python)
    • [SPARK-3181]: Huber ロスによる堅牢な線形回帰 (Scala/Java/Python)
    • [SPARK-13969]: FeatureHasher トランスフォーマー (Scala/Java/Python)
    • いくつかの特徴トランスフォーマーに対する複数列サポート
    • [SPARK-21633] および SPARK-21542]: Python におけるカスタムパイプラインコンポーネントのサポート向上。
  • 新機能
    • [SPARK-21087]: CrossValidator および TrainValidationSplit は、フィット時にすべてのモデルを収集できます (Scala/Java)。これにより、すべてのフィット済みモデルを検査または保存できます。
    • [SPARK-19357] メタアルゴリズム CrossValidatorTrainValidationSplitOneVsRest は、複数のサブモデルを並列 Spark ジョブでフィットするための並列度パラメータをサポートします。
    • [SPARK-17139]: 多項ロジスティック回帰のモデルサマリー (Scala/Java/Python)
    • [SPARK-18710]: GLM にオフセットを追加
    • [SPARK-20199]: GBTClassifier および GBTRegressorfeatureSubsetStrategy パラメータを追加しました。これを使用して特徴をサブサンプルすると、トレーニング速度が大幅に向上します。このオプションは xgboost の主要な強みでした。
  • その他の注目すべき変更点
    • [SPARK-22156] Word2Vec の学習率が num イテレーションでスケーリングされるのを修正しました。新しい学習率は、元の Word2Vec C コードに一致するように設定されており、トレーニングからより良い結果が得られるはずです。
    • [SPARK-22289] 行列パラメータの JSON サポートを追加 (これにより、係数に制約がある場合の LogisticRegressionModel による ML永続化のバグが修正されました)。
    • [SPARK-22700] Bucketizer.transformNaN を含む行を誤ってドロップします。Param handleInvalid が "skip" に設定されている場合、Bucketizer は、別の (無関係な) 列に NaN 値がある場合、入力列に有効な値を持つ行をドロップしていました。
    • [SPARK-22446] Catalyst オプティマイザが、handleInvalid が "error" に設定されている場合に StringIndexerModel が誤った "Unseen label" 例外をスローすることがありました。これは、述語プッシュダウンにより、無効な行が入力データセットから既にフィルタリングされた後でもエラーが発生する可能性がありました。
    • [SPARK-21681] 多項ロジスティック回帰におけるエッジケースのバグを修正。これにより、一部の特徴の分散がゼロの場合に係数が不正になることがありました。
    • 主要な最適化
      • [SPARK-22707] CrossValidator のメモリ使用量を削減
      • [SPARK-22949] TrainValidationSplit のメモリ使用量を削減
      • [SPARK-21690] Imputer は、データに対して単一パスでトレーニングする必要があります。
      • [SPARK-14371] OnlineLDAOptimizer は、ミニバッチごとにドライバに統計を収集するのを回避します。

プログラミングガイド: 機械学習ライブラリ (MLlib) ガイド

SparkR

SparkR における 2.3.0 リリースの主な焦点は、UDF の安定性の向上と、既存の API のいくつかの新しい SparkR ラッパーの追加でした。

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

GraphX

  • 最適化
    • [SPARK-5484] Pregel は、StackOverflowErrors を回避するために定期的にチェックポイントを行うようになりました。
    • [SPARK-21491] いくつかの場所でパフォーマンスがわずかに向上しました。

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

非推奨

  • Python
    • [SPARK-23122] PySpark の SQLContext および Catalog における UDF の register* を非推奨化
  • MLlib
    • [SPARK-13030] OneHotEncoder は非推奨になり、3.0 で削除されます。新しい OneHotEncoderEstimator に置き換えられました。3.0 では OneHotEncoderEstimatorOneHotEncoder にリネームされますが、OneHotEncoderEstimator はエイリアスとして保持されます。

動作の変更

  • Spark SQL
    • [SPARK-22036]: デフォルトでは、10 進数間の算術演算は、正確な表現が不可能な場合に (以前のバージョンで NULL を返すのではなく) 丸められた値を返します。
    • [SPARK-22937]: すべての入力がバイナリの場合、SQL elt() はバイナリとして出力します。それ以外の場合は文字列として出力します。以前のバージョンでは、入力型に関係なく常に文字列として返されました。
    • [SPARK-22895]: Join/Filter の決定的述語で、最初の非決定的述語の後にあるものも、可能な場合は子演算子にプッシュダウン/スルーされます。以前のバージョンでは、これらのフィルタは述語プッシュダウンの対象ではありませんでした。
    • [SPARK-22771]: すべての入力がバイナリの場合、functions.concat() はバイナリとして出力します。それ以外の場合は文字列として出力します。以前のバージョンでは、入力型に関係なく常に文字列として返されました。
    • [SPARK-22489] Join のどちらかの側がブロードキャスト可能な場合、ブロードキャストヒントで明示的に指定されたテーブルをブロードキャストすることを優先します。
    • [SPARK-22165] パーティション列の推論は、以前は異なる推論型に対して不正確な共通型を見つけていました。たとえば、以前は double 型と date 型の共通型として double 型になっていました。現在、このような競合に対して正しい共通型を見つけます。詳細は、移行ガイドを参照してください。
    • [SPARK-22100] percentile_approx 関数は、以前は numeric 型の入力を受け入れ、double 型の結果を出力していました。現在、date 型、timestamp 型、および numeric 型を入力型としてサポートしています。結果型も入力型と同じになり、パーセンタイルの計算においてより合理的になりました。
    • [SPARK-21610] 参照される列が内部の破損レコード列 (デフォルトで _corrupt_record という名前) のみを含む場合、生の JSON/CSV ファイルからのクエリは許可されなくなりました。代わりに、解析結果をキャッシュまたは保存してから、同じクエリを送信できます。
    • [SPARK-23421] Spark 2.2.1 および 2.3.0 以降、データソーステーブルにパーティションスキーマとデータスキーマの両方に存在する列がある場合、スキーマは常に実行時に推論されます。推論されたスキーマにはパーティション列は含まれません。テーブルを読み取る際、Spark はデータソースファイルに格納されている値ではなく、これらの重複する列のパーティション値を尊重します。2.2.0 および 2.1.x リリースでは、推論されたスキーマはパーティション化されていましたが、テーブルのデータはユーザーから見えませんでした (つまり、結果セットは空でした)。
  • PySpark
    • [SPARK-19732] na.fill() または fillna はブール値も受け入れ、null をブール値で置き換えます。以前の Spark バージョンでは、PySpark はそれを無視し、元の Dataset/DataFrame を返していました。
    • [SPARK-22395] Pandas 関連の機能 (例: toPandas、Pandas DataFrame からの createDataFrame など) を使用するには、Pandas 0.19.2 以降が必要です。
    • [SPARK-22395] Pandas 関連の機能におけるタイムスタンプ値の動作は、セッションタイムゾーンを尊重するように変更されました。これは以前のバージョンでは無視されていました。
    • [SPARK-23328] df.replace は、to_replace が辞書でない場合に value を省略できませんでした。以前は、value は他のケースで省略可能であり、デフォルトで None を持っていたため、直感的ではなくエラーが発生しやすかったです。
  • MLlib
    • 破壊的な API 変更: ロジスティック回帰モデルサマリーのクラスとトレイトの階層は、よりクリーンで、多クラスサマリーの追加をより良く収容するように変更されました。これは、LogisticRegressionTrainingSummaryBinaryLogisticRegressionTrainingSummary にキャストするユーザーコードにとって破壊的な変更です。代わりに model.binarySummary メソッドを使用する必要があります。詳細については、[SPARK-17139] を参照してください (これは @Experimental API です)。これは Python のサマリーメソッドには影響せず、多項および二項の場合の両方で引き続き正しく機能します。
    • [SPARK-21806] BinaryClassificationMetrics.pr(): 最初の点 (0.0, 1.0) は誤解を招くため、リコールが最も低い点に対応する精度 p を持つ (0.0, p) に置き換えられました。
    • [SPARK-16957] 決定木は、分割値を選択する際に重み付き中間値を使用するようになりました。これにより、モデルトレーニングの結果が変更される可能性があります。
    • [SPARK-14657] インターセプトのない RFormula は、ネイティブ R の動作と一致するように、文字列項をエンコードする際に参照カテゴリを出力するようになりました。これにより、モデルトレーニングの結果が変更される可能性があります。
    • [SPARK-21027] OneVsRest で使用されるデフォルトの並列度は、1 (つまりシリアル) に設定されるようになりました。2.2 以前のバージョンでは、並列度は Scala のデフォルトスレッドプールサイズに設定されていました。これによりパフォーマンスが変更される可能性があります。
    • [SPARK-21523] Breeze を 0.13.2 にアップグレードしました。これには、L-BFGS の強いた強いた線検索における重要なバグ修正が含まれていました。
    • [SPARK-15526] JPMML 依存関係はシェーディングされるようになりました。
    • バグ修正セクションも参照して、バグ修正の結果として発生した動作の変更を確認してください。

既知の問題

  • [SPARK-23523][SQL] OptimizeMetadataOnlyQuery ルールによる不正な結果
  • [SPARK-23406] ストリーム-ストリーム自己結合におけるバグ

クレジット

最後に、このリリースは以下の貢献者なしでは不可能でした: ALeksander Eskilson, Adrian Ionescu, Ajay Saini, Ala Luszczak, Albert Jang, Alberto Rodriguez De Lema, Alex Mikhailau, Alexander Istomin, Anderson Osagie, Andrea Zito, Andrew Ash, Andrew Korzhuev, Andrew Ray, Anirudh Ramanathan, Anton Okolnychyi, Arman Yazdani, Armin Braun, Arseniy Tashoyan, Arthur Rand, Atallah Hezbor, Attila Zsolt Piros, Ayush Singh, Bago Amirbekian, Ben Barnard, Bo Meng, Bo Xu, Bogdan Raducanu, Brad Kaiser, Bravo Zhang, Bruce Robbins, Bruce Xu, Bryan Cutler, Burak Yavuz, Carson Wang, Chang Chen, Charles Chen, Cheng Wang, Chenjun Zou, Chenzhao Guo, Chetan Khatri, Chie Hayashida, Chin Han Yu, Chunsheng Ji, Corey Woodfield, Daniel Li, Daniel Van Der Ende, Devaraj K, Dhruve Ashar, Dilip Biswal, Dmitry Parfenchik, Donghui Xu, Dongjoon Hyun, Eren Avsarogullari, Eric Vandenberg, Erik LaBianca, Eyal Farago, Favio Vazquez, Felix Cheung, Feng Liu, Feng Zhu, Fernando Pereira, Fokko Driesprong, Gabor Somogyi, Gene Pang, Gera Shegalov, German Schiavon, Glen Takahashi, Greg Owen, Grzegorz Slowikowski, Guilherme Berger, Guillaume Dardelet, Guo Xiao Long, He Qiao, Henry Robinson, Herman Van Hovell, Hideaki Tanaka, Holden Karau, Huang Tengfei, Huaxin Gao, Hyukjin Kwon, Ilya Matiach, Imran Rashid, Iurii Antykhovych, Ivan Sadikov, Jacek Laskowski, JackYangzg, Jakub Dubovsky, Jakub Nowacki, James Thompson, Jan Vrsovsky, Jane Wang, Jannik Arndt, Jason Taaffe, Jeff Zhang, Jen-Ming Chung, Jia Li, Jia-Xuan Liu, Jin Xing, Jinhua Fu, Jirka Kremser, Joachim Hereth, John Compitello, John Lee, John O’Leary, Jorge Machado, Jose Torres, Joseph K. Bradley, Josh Rosen, Juliusz Sompolski, Kalvin Chau, Kazuaki Ishizaki, Kent Yao, Kento NOZAWA, Kevin Yu, Kirby Linvill, Kohki Nishio, Kousuke Saruta, Kris Mok, Krishna Pandey, Kyle Kelley, Li Jin, Li Yichao, Li Yuanjian, Liang-Chi Hsieh, Lijia Liu, Liu Shaohui, Liu Xian, Liyun Zhang, Louis Lyu, Lubo Zhang, Luca Canali, Maciej Brynski, Maciej Szymkiewicz, Madhukara Phatak, Mahmut CAVDAR, Marcelo Vanzin, Marco Gaido, Marcos P, Marcos P. Sanchez, Mark Petruska, Maryann Xue, Masha Basmanova, Miao Wang, Michael Allman, Michael Armbrust, Michael Gummelt, Michael Mior, Michael Patterson, Michael Styles, Michal Senkyr, Mikhail Sveshnikov, Min Shen, Ming Jiang, Mingjie Tang, Mridul Muralidharan, Nan Zhu, Nathan Kronenfeld, Neil Alexander McQuarrie, Ngone51, Nicholas Chammas, Nick Pentreath, Ohad Raviv, Oleg Danilov, Onur Satici, PJ Fanning, Parth Gandhi, Patrick Woody, Paul Mackles, Peng Meng, Peng Xiao, Pengcheng Liu, Peter Szalai, Pralabh Kumar, Prashant Sharma, Rekha Joshi, Remis Haroon, Reynold Xin, Reza Safi, Riccardo Corbella, Rishabh Bhardwaj, Robert Kruszewski, Ron Hu, Ruben Berenguel Montoro, Ruben Janssen, Rui Zha, Rui Zhan, Ruifeng Zheng, Russell Spitzer, Ryan Blue, Sahil Takiar, Saisai Shao, Sameer Agarwal, Sandor Murakozi, Sanket Chintapalli, Santiago Saavedra, Sathiya Kumar, Sean Owen, Sergei Lebedev, Sergey Serebryakov, Sergey Zhemzhitsky, Seth Hendrickson, Shane Jarvie, Shashwat Anand, Shintaro Murakami, Shivaram Venkataraman, Shixiong Zhu, Shuangshuang Wang, Sid Murching, Sital Kedia, Soonmok Kwon, Srinivasa Reddy Vundela, Stavros Kontopoulos, Steve Loughran, Steven Rand, Sujith, Sujith Jay Nair, Sumedh Wale, Sunitha Kambhampati, Suresh Thalamati, Susan X. Huynh, Takeshi Yamamuro, Takuya UESHIN, Tathagata Das, Tejas Patil, Teng Peng, Thomas Graves, Tim Van Wassenhove, Travis Hegner, Tristan Stevens, Tucker Beck, Valeriy Avanesov, Vinitha Gankidi, Vinod KC, Wang Gengliang, Wayne Zhang, Weichen Xu, Wenchen Fan, Wieland Hoffmann, Wil Selwood, Wing Yew Poon, Xiang Gao, Xianjin YE, Xianyang Liu, Xiao Li, Xiaochen Ouyang, Xiaofeng Lin, Xiaokai Zhao, Xiayun Sun, Xin Lu, Xin Ren, Xingbo Jiang, Yan Facai (Yan Fa Cai), Yan Kit Li, Yanbo Liang, Yash Sharma, Yinan Li, Yong Tang, Youngbin Kim, Yuanjian Li, Yucai Yu, Yuhao Yang, Yuming Wang, Yuval Itzchakov, Zhan Zhang, Zhang A Peng, Zhaokun Liu, Zheng RuiFeng, Zhenhua Wang, Zuo Tingbing, brandonJY, caneGuy, cxzl25, djvulee, eatoncys, heary-cao, ho3rexqj, lizhaoch, maclockard, neoremind, peay, shaofei007, wangjiaochun, zenglinxi0615


Spark ニュースアーカイブ