Spark Release 1.6.0

Apache Spark 1.6.0 は 1.x ラインの7番目のリリースです。このリリースには248名以上のコントリビュータからの貢献が含まれています!Spark 1.6.0をダウンロードするには、ダウンロードページをご覧ください。

JIRAで詳細な変更点を確認できます。ここでは、主な変更点をまとめたリストを用意しました。

Spark Core/SQL

  • APIの更新
    • SPARK-9999  Dataset API - RDDに似た新しいSpark APIで、ユーザーはカスタムオブジェクトとラムダ関数を扱いつつ、Spark SQL実行エンジンの利点を享受できます。
    • SPARK-10810 セッション管理 - 異なるユーザーが、異なる設定と一時テーブルを持ちながらクラスタを共有できます。
    • SPARK-11197 ファイルに対するSQLクエリ - テーブルを登録せずに、サポートされているあらゆる形式のファイルに対してSQLクエリを実行するための簡潔な構文。
    • SPARK-11745 標準外のJSONファイルの読み込み - 標準外のJSONファイル(例:シングルクォート、引用符なし属性)を読み込むためのオプションが追加されました。
    • SPARK-10412 SQL実行のオペレータごとのメトリクス - メモリ使用量とスピルされたデータサイズについて、オペレータごとに統計情報を表示します。
    • SPARK-11329 StructTypesの(*)展開 - 任意の数の列のネストとアンネストを容易にします。
    • SPARK-4849  キャッシュデータの高度なレイアウト - インメモリテーブルスキャンにパーティショニングと順序付けスキーマを格納し、DF APIにdistributeByとlocalSortを追加します。
    • SPARK-11778  - DataFrameReader.tableがデータベース名の指定をサポートします。例えば、sqlContext.read.table(“dbName.tableName”)を使用して、データベース“dbName”のテーブル“tableName”からDataFrameを作成できます。
    • SPARK-10947  - JSONからDataFrameへのスキーマ推論において、ユーザーはデータソースオプションでprimitivesAsStringをtrueに設定することで、すべてのプリミティブ値型を文字列として推論できます。primitivesAsStringのデフォルト値はfalseです。
  • パフォーマンス
    • SPARK-10000 統合メモリ管理 - 領域の排他的な分割ではなく、実行とキャッシュのための共有メモリ。
    • SPARK-11787 Parquetパフォーマンス - フラットスキーマを使用する場合のParquetスキャンパフォーマンスの改善。
    • SPARK-9241  distinct集計を含むクエリのためのクエリオプティマイザの改善 - distinct列のカーディナリティが高い場合、distinct集計のクエリプランがより堅牢になりました。
    • SPARK-9858  アダプティブクエリ実行 - ジョインと集計のためのリデューサー数の自動選択の初期サポート。
    • SPARK-10978 データソースAPIにおける二重フィルタの回避 - フィルタプッシュダウンを備えたデータソースを実装する際、開発者はSpark SQLにプッシュダウンされたフィルタの二重評価を回避するように指示できるようになりました。
    • SPARK-11111 高速NULLセーフジョイン - NULLセーフ等価性(<=>)を使用するジョインは、Cartesian積を計算する代わりにSortMergeJoinを使用して実行されるようになりました。
    • SPARK-10917, SPARK-11149 インメモリ列キャッシュパフォーマンス - DataFrameやSQLに複雑な型が含まれるデータをキャッシュする際のパフォーマンスが大幅に向上しました(最大14倍)。
    • SPARK-11389 オフヒープメモリを使用したSQL実行 - GCオーバーヘッドを回避するために、クエリ実行をオフヒープメモリを使用して行うためのサポート。

Spark Streaming

  • APIの更新
    • SPARK-2629  新規改善された状態管理 - mapWithState - ステートフルストリーム処理のためのDStream変換。機能とパフォーマンスにおいてupdateStateByKeyを置き換えます。
    • SPARK-11198 Kinesisレコードのデ・アグリゲーション - KinesisストリームはKCL 1.4.0を使用するようにアップグレードされ、KPL集約レコードの透過的なデ・アグリゲーションをサポートします。
    • SPARK-10891 Kinesisメッセージハンドラ関数 - Kinesisレシーバ内のKinesisレコードに任意の関数を適用し、メモリに格納するデータをカスタマイズできるようにします。
    • SPARK-6328  PythonストリーミングリスナーAPI - ストリーミング統計情報(スケジューリング遅延、バッチ処理時間など)をストリーミングで取得します。
  • UIの改善
    • ストリーミングタブ、タイムライン、バッチリスト、バッチ詳細ページで障害が可視化されました。
    • ストリーミングタブで出力操作がプログレスバーとして可視化されました。

MLlib

  • 新しいアルゴリズム/モデル
    • SPARK-8518  生存分析 - 生存分析のための線形対数モデル。
    • SPARK-9834  最小二乗法のための正規方程式 - Rライクなモデル要約統計量を提供する正規方程式ソルバー。
    • SPARK-3147  オンライン仮説検定 - Spark StreamingフレームワークでのA/Bテスト。
    • SPARK-9930  新しい特徴量変換器 - ChiSqSelector、QuantileDiscretizer、SQLトランスフォーマー。
    • SPARK-6517  二分法K-Meansクラスタリング - K-Meansの高速トップダウンクラスタリングバリアント。
  • APIの改善
    • ML Pipelines
      • SPARK-6725  パイプライン永続化 - MLパイプラインの保存/読み込み。spark.mlアルゴリズムの限定的なサポート付き。
      • SPARK-5565  ML PipelinesでのLDA - ML Pipelinesでの潜在ディリクレ名割り当て(LDA)のAPI。
    • R API
      • SPARK-9836  GLMのためのRライクな統計量 - 最小二乗法のための(部分的な)Rライクな統計量。summary(model)経由。
      • SPARK-9681  R式における特徴量相互作用 - R式における相互作用演算子「:」。
    • Python API - Python APIの機能パリティに近づけるための多くの改善。
  • その他の改善
    • SPARK-7685 , SPARK-9642  GLMのインスタンス重み - ロジスティック回帰と線形回帰でインスタンス重みを受け取ることができます。
    • SPARK-10384, SPARK-10385 DataFrameにおける単変量および二変量統計量 - 分散、標準偏差、相関など。
    • SPARK-10117 LIBSVMデータソース - LIBSVMをSQLデータソースとして利用可能に。
  • ドキュメントの改善
    • SPARK-7751  @sinceバージョン - ドキュメントにクラスやメソッドが追加された初期バージョンが含まれるようになりました。
    • SPARK-11337 テスト可能なコード例 - ユーザーガイドの例にあるコードの自動テスト。

非推奨

  • spark.mllib.clustering.KMeansの「runs」パラメータは非推奨になりました。
  • spark.ml.classification.LogisticRegressionModelおよびspark.ml.regression.LinearRegressionModelの「weights」フィールドは、新しい名前「coefficients」に置き換わり非推奨となりました。これにより、アルゴリズムに与えられるインスタンス(行)の重みとの区別が明確になります。

動作の変更

  • MLlib
    • spark.mllib.tree.GradientBoostedTreesvalidationTol のセマンティクスが1.6で変更されました。以前は、誤差の絶対変化の閾値でした。現在は、GradientDescentconvergenceTol の動作に似ています。大きな誤差の場合は相対誤差(前の誤差に対する相対値)、小さな誤差(0.01未満)の場合は絶対誤差を使用します。
    • spark.ml.feature.RegexTokenizer:以前は、トークン化の前に文字列を小文字に変換していませんでした。現在はデフォルトで小文字に変換しますが、オプションで無効にすることもできます。これにより、よりシンプルなTokenizerトランスフォーマーの動作と一致します。
  • SQL
    • Tungstenモードとコード生成を無効にするフラグ(spark.sql.tungsten.enabled)が削除されました。Tungstenモードとコード生成は常に有効になっています(SPARK-11644)。
    • Spark SQLのパーティション検出の動作が変更され、指定されたパスの子であるパーティションディレクトリのみを検出するようになりました。(例:path="/my/data/x=1" の場合、x=1 はパーティションとは見なされず、x=1 の子のみが検出されます。)この動作は、パーティション検出を開始するbasePathを手動で指定することで上書きできます(SPARK-11678)。
    • UDFにおいて、プリミティブ型の入力引数(NULL不可の入力引数)がある場合、その引数の値がNULLの場合、UDFはNULLを返します(SPARK-11725)。
    • 整数型の値をタイムスタンプにキャストする場合(例:long値をタイムスタンプにキャスト)、値はミリ秒ではなく秒単位として扱われます(SPARK-11724)。
    • distinct集計を含むクエリのためのクエリオプティマイザが改善された(SPARK-9241)ことにより、単一のdistinct集計を含むクエリのプランがより堅牢なバージョンに変更されました。Spark 1.5のプランナによって生成されたプランに戻すには、spark.sql.specializeSingleDistinctAggPlanningtrueに設定してください(SPARK-12077)。
    • RowのgetBoolean、getByte、getShort、getInt、getLong、getFloat、getDoubleは、指定された序数位置の値がNULLの場合、NullPointerExceptionをスローします(SPARK-11553)。
    • varianceはvar_popのエイリアスではなくvar_sampのエイリアスになりました(SPARK-11490)。
    • String型の値をBoolean型にキャストするセマンティクスが変更されました(SPARK-10442)。“t”、“true”、“y”、“yes”、“1”のいずれかをキャストするとtrueを返します。“f”、“false”、“n”、“no”、“0”のいずれかをキャストするとfalseを返します。その他のStringリテラルをBoolean型にキャストするとnullが返されます。
    • 集計関数firstおよびlastは、デフォルトでNULL値を無視しなくなりました(SPARK-9740)。NULL値を無視させるには、firstおよびlastの2番目の引数をtrueに設定します。例えば、first(col, true)は列colの最初の非NULL値を返します。

既知の問題

  • SPARK-12546 動的パーティションを使用してDataFrame/テーブルをParquetとして保存するとOOMが発生する可能性があります。これは、SparkとParquetの両方のメモリ使用量をspark.memory.fraction(例:0.4)およびparquet.memory.pool.ratio(例:0.3、Hadoop設定、例えばcore-site.xmlで設定)を減らすことで回避できます。

クレジット

最後に、このリリースは以下のコントリビュータなしには実現できませんでした:Adam Lewandowski, Adam Roberts, Adrian Zhuang, Ahir Reddy, Akash Mishra, Alex Angelini, Alex Bozarth, Alexander Slesarenko, Alexander Ulanov, Alexey Grishchenko, Alok Singh, Anderson De Andrade, Andrew Or, Andrew Ray, Ankur Dave, Artem Aliev, Ashwin Shankar, Ashwin Swaroop, Asoka Diggs, Avrohom Katz, Bartlomiej Alberski, Ben Fradet, Bertrand Dechoux, Bharat Lal, Bhargav Mangipudi, Bill Chambers, Bin Wang, Bo Meng, Brennon York, Bryan Cutler, Burak Yavuz, Calvin Jia, Carson Wang, Carsten Blank, Charles Yeh, Cheng Hao, Cheng Lian, Chris Bannister, Chris Kang, Chris Snow, Christian Kadner, Christian Kurz, Chuan Shao, Cody Koeninger, DB Tsai, Daniel Imfeld, Daniel Jalova, Daoyuan Wang, David Tolpin, Davies Liu, Deming Zhu, Dennis Huo, Derek Dagit, Dilip Biswal, Dmitry Vasilets, Dominik Dahlem, Edoardo Vacchi, Ehsan M.Kermani, Eric Liang, Erick Tryzelaar, Erik Shilts, Eugen Cepoi, Evan Chen, Ewan Leith, Fazlan Nazeem, Fei Wang, Felix Bechstein, Felix Cheung, Feynman Liang, Forest Fang, Frank Rosner, Gabor Liptak, Gaurav Kumar, Glenn Weidner, Greg Lee, Hari Shreedharan, Herman Van Hovell, Holden Karau, Hossein Falaki, Huang Zhaowei, Huaxin Gao, Hurshal Patel, Hyukjin Kwon, Ilya Ganelin, Imran Rashid, Iulian Dragos, Jacek Laskowski, Jacek Lewandowski, Jacker Hu, Jackie MaKing, Jaehong Choi, Jakob Odersky, Jason White, Jayant Shekar, Jean Lyn, Jean-Baptiste Onofre, Jeff Zhang, Jeffrey Naisbitt, Jeroen Schot, JiGao FuJia Li, Jian Feng Zhang, Jie Hu, Jie Huang, Jihong MA, Joseph K. Bradley, Josh Rosen, Josiah Samuel, Jungtaek Lim, Kai Jiang, Kai Jiang, Kai Sasaki, Kai Xin Xiao Lei, Kay Ousterhout, Kent Yao, Kevin Cox, Kevin Yu, Koert Kuipers, Kousuke Saruta, Lex Yu, Liang-Chi Hsieh, Lianhui Wang, Luc Bourlier, Luciano Resende, Lukasz Piepiora, Luvsandondov Lkhamsuren, Maciej Szymkiewicz, Madhusudanan Kandasamy, Mahmoud Lababidi, Manoj Kumar, Marcelo Vanzin, Marius Van Niekerk, Mark Grover, Mark Hamstra, Matei Zaharia, Matt Hagen, Matt Massie, Matthew Cheah, Meihua Wu, Michael Armbrust, Michael Gummelt, Mike Dusenberry, Mikhail Bautin, Mingyu Kim, Monica Liu, Mortada Mehyar, Nakul Jindal, Nan ZhuNarine Kokhlikyan, Nathan Howell, Naveen Kumar Minchu, Navis Ryu, Neelesh Srinivas Salian, Nicholas Chammas, Nick Buroojy, Nick Evans, Nick Pritchard, Nishkam Ravi, Nithin Asokan, Nitin Goyal, Noel Smith, Nong Li, Oscar D. Lara Yejas, Pat Shields, Patrick Wendell, Pete Robbins, Philipp Hoffmann, Prashant Sharma, Pravin Gadakh, R. H., Ram Sriharsha, Rekha Joshi, Rerngvit Yanggratoke, Reynold Xin, Reza Zadeh, Rick Hillegas, Rishabh Bhardwaj, Robin East, Rohit Agarwal, Roy Gao, Ryan Williams, Sachin Aggarwal, Saisai Shao, Sean Owen, Sean Paradiso, Sem Mulder, Sephiroth Lin, Seth Hendrickson, Shagun Sodhani, Shimizu Yoshihiro, Shivaram Venkataraman, Shixiong Zhu, Somil Deshmukh, Srinivasa Reddy Vundela, Stephen De Gennaro, Stephen Hellberg, Stephen Hopper, Stephen Samuel, Steve Loughran, Su Yan, Sun Rui, Suresh Thalamati, Takahashi Hiroshi, Takeshi Yamamuro, Tarek Auel, Tathagata Das, Ted Yu, Teng Qiu, Thomas Graves, Tijo Thomas, Timothy Chen, Timothy Hunter, Tingjun Xu, Todd Wan, Tom Graves, Travis Hegner, Trystan Leftwich, Uncle Gen, Vikas Nelamangala, Vinod KC, Vladimir Vladimirov, Vyacheslav Baranov, Wang Tao, Weiqiang Zhuang, Wenchen Fan, Wenjian Huang, Wieland Hoffmann, Wojciech Indyk, Xiangrui Meng, Xiao LiXin Ren, Xin Wu, Xiu Guo, Xusen Yin, Yadong Qi, Yanbo Liang, Yangping Wu, Yash Datta, Yijie Shen, Yin Huai, Yongjia Wang, Yu Gao, Yu ISHIKAWA, Yuhao Yang, Yuming Wang, Yves Raimond, Zee Chen, Zhenhua Wang, Zhichao Li, Zhongshuai Pei, Zhuo Liu


Spark ニュースアーカイブ