web-dev-qa-db-ja.com

Apache Spark SQLContext vs HiveContextの違いは何ですか?

Apache Spark SQLContextとHiveContextの違いは何ですか?

HiveContextはSQLContextのスーパーセットであるため、開発者は常に、SQLContextよりも多くの機能を備えたHiveContextを使用する必要があると言うソースもあります。ただし、各コンテキストの現在のAPIはほとんど同じです。

  • SQLContext/HiveContextがより役立つシナリオは何ですか?.
  • HiveContextは、Hiveを使用する場合にのみ有用ですか?.
  • または、Apache Spark?を使用してビッグデータアプリを実装するのにSQLContextだけが必要ですか?
45
tlarevo

Spark 2.0 +

Spark 2.0はネイティブウィンドウ関数( SPARK-8641 )を提供し、構文解析のいくつかの追加の改善とSQL 2003準拠の大幅な改善を特徴としているため、コア機能を達成するためにHiveへの依存度が大幅に低下し、そのためHiveContext(Hiveサポート付きのSparkSession)は、それほど重要ではないようです。

スパーク<2.0

明らかに、Hiveを使用する場合は、HiveContextを使用する必要があります。現在の最大の違い(Spark 1.5)は、 window functions のサポートとHive UDFにアクセスする機能です。

一般的に、ウィンドウ関数は非常にクールな機能であり、RDDとDataFrameを行き来することなく、非常に複雑な問題を簡潔に解決するために使用できます。特にPARTITION BY句がない場合、パフォーマンスはまだ最適とは言えませんが、実際には何もありませんSpark特定。

Hive UDFに関しては今では深刻な問題ではありませんが、Spark 1.5以前は多くのSQL関数がHive UDFを使用して表現されており、HiveContextが必要でした。

HiveContextは、より堅牢なSQLパーサーも提供します。例を参照してください: py4j.protocol.Py4JJavaError select statetmentを使用してデータフレーム内のネストされた列を選択するとき

最後に、Thriftサーバーを起動するにはHiveContextが必要です。

HiveContextの最大の問題は、大きな依存関係が伴うことです。

38
zero323

Spark SQLに対してプログラミングする場合、Hiveサポートが必要かどうかに応じて2つのエントリポイントがあります。推奨されるエントリポイントは、HiveQLおよびその他のHive依存機能へのアクセスを提供するHiveContextです。より基本的なSQLContext Spark Hiveに依存しないSQLサポートのサブセットを提供します。

-分離は、すべてのHive依存関係を含めることと競合する可能性のあるユーザーのために存在します。

-SQLContextにはないHiveContextの追加機能には、より完全なHiveQLパーサーを使用したクエリの作成機能、Hive UDFへのアクセス、Hiveテーブルからのデータの読み取り機能が含まれます。

-HiveContextの使用には、既存のHiveセットアップは必要ありません。

3
sdinesh94

HiveContextは依然としてsqlcontextのスーパーセットであり、Hiveを使用する場合はHive-site.xmlから構成を読み取ることができるなど、特定の追加プロパティが含まれています。

3
anubhav