Spark 1.3.0 は、1.X ラインにおける4回目のリリースです。このリリースでは、Spark SQL がアルファプロジェクトから卒業すると同時に、新しい DataFrame API が導入されました。また、Spark のコアエンジンにおけるユーザビリティの改善、MLlib および Spark Streaming の機能拡張も行われています。Spark 1.3 は、60以上の機関から174名のコントリビューターによって、1000以上の個別のパッチによって実現された成果です。
Spark 1.3 をダウンロードするには、ダウンロードページをご覧ください。
Spark 1.3 では、コアエンジンにいくつかのユーザビリティ改善が施されています。コアAPIは、高コストなreduce操作を高速化するために、マルチレベル集計ツリーをサポートするようになりました。エラーレポート機能が改善され、特定の落とし穴となる操作に関する情報がより分かりやすくなりました。Spark の Jetty 依存関係は、ユーザープログラムとの競合を避けるために、シェーディングされるようになりました。Spark は、一部の通信エンドポイントでSSL暗号化をサポートするようになりました。最後に、UIにリアルタイムのGCメトリクスとレコード数が追加されました。
Spark 1.3 では、構造化データセットを扱うための強力で便利な演算子を提供する新しいDataFrames APIが追加されました。DataFrame は、名前付きフィールドとスキーマ情報を含む、ベースとなる RDD API の進化形です。Hive テーブル、JSON データ、JDBC データベース、または Spark の新しいデータソース API の実装から DataFrame を簡単に構築できます。DataFrame は、Spark コンポーネント間、および他のシステムとのデータのインポート/エクスポートにおける共通の交換フォーマットとなります。DataFrame は Python, Scala, Java でサポートされています。
このリリースでは、Spark SQL はアルファプロジェクトから卒業し、HiveQL 方言および安定したプログラム API に対する後方互換性の保証を提供します。Spark SQL は、データソース API へのテーブル書き込みをサポートするようになりました。新しいJDBC データソースにより、MySQL、Postgres、その他の RDBMS システムとの間でデータのインポート/エクスポートが可能になります。様々な小規模な変更により、Spark SQL での HiveQL のカバレッジが拡張されました。Spark SQL は、Parquet で互換性のあるスキーマをマージする機能により、スキーマ進化もサポートするようになりました。
このリリースでは、Spark MLlib はいくつかの新しいアルゴリズムを導入しました:トピックモデリングのためのLatent Dirichlet Allocation (LDA)、多クラス分類のための多項ロジスティック回帰、クラスタリングのためのガウス混合モデル (GMM) および Power Iteration Clustering、頻繁パターンマイニングのためのFP-growth、分散線形代数のためのBlock Matrix 抽象化。交換可能なフォーマットでのモデルのインポート/エクスポートの初期サポートが追加されました。これは将来のバージョンで Java/Python/Scala のより多くのモデルタイプをカバーするように拡張される予定です。k-means と ALS の実装は、大幅なパフォーマンス向上につながるアップデートを受けました。PySpark は、Spark 1.2 で追加されたML パイプライン API、および勾配ブーステッドツリーとガウス混合モデルをサポートするようになりました。最後に、ML パイプライン API は新しい DataFrame 抽象化をサポートするように移植されました。
Spark 1.3 では、新しい直接 Kafka API(ドキュメント)が導入され、ライトアヘッドログを使用せずにexactly-once配信が可能になりました。また、Python Kafka APIと、将来のリリースで追加される追加の Python API のためのインフラストラクチャが追加されました。オンライン版のロジスティック回帰と、バイナリレコードを読み取る機能も追加されました。ステートフルな操作では、初期状態RDDのロードサポートが追加されました。最後に、ストリーミングプログラミングガイドが更新され、ストリーミングアプリケーション内でのSQLおよびDataFrame操作に関する情報、および耐障害性セマンティクスに関する重要な明確化が含まれました。
GraphX はこのリリースでいくつかのユーティリティ関数を追加しました。これには、標準化されたエッジグラフへの変換が含まれます。
Spark 1.3 は Spark 1.X リリースとバイナリ互換性があるため、コードの変更は不要です。ただし、明示的に不安定としてマークされている API は除外されます。
Spark SQL API の安定化の一環として、SchemaRDD クラスは DataFrame にリネームされました。Spark SQL の移行ガイドで、アップグレードプロセスについて詳しく説明しています。また、Spark SQL は、予約語("string" や "table" など)を使用する列識別子をバッククォートでエスケープする必要があるようになりました。
このリリースには、Spark 1.3.1 で対応される予定の既知の問題がいくつかあります。
collect() におけるメモリリーク。貢献してくださった皆様、ありがとうございました!