web-dev-qa-db-ja.com

SparkSQLはサブクエリをサポートしていますか?

このクエリをSpark Shellで実行していますが、エラーが発生します。

sqlContext.sql(
 "select sal from samplecsv where sal < (select MAX(sal) from samplecsv)"
).collect().foreach(println)

エラー:

Java.lang.RuntimeException:[1.47]失敗: ``) ''が必要ですが、識別子MAXが見つかりました

sal <(samplecsvからMAX(sal)を選択)^ scala.sys.package $ .error(package.scala:27)でsamplecsvからsalを選択してください。

15

計画機能

  • SPARK-23945 (Column.isin()は、入力として単一列のDataFrameを受け入れる必要があります)。
  • SPARK-18455 (相関サブクエリ処理の一般的なサポート)。

Spark 2.0 +

Spark SQLは、相関サブクエリと非相関サブクエリの両方をサポートする必要があります。詳細については、 SubquerySuite を参照してください。以下に例を示します。

select * from l where exists (select * from r where l.a = r.c)
select * from l where not exists (select * from r where l.a = r.c)

select * from l where l.a in (select c from r)
select * from l where a not in (select c from r)

残念ながら、現在(Spark 2.0)は、DataFrame DSLを使用して同じロジックを表現することはできません。

スパーク<2.0

SparkはFROM句でサブクエリをサポートします(Hive <= 0.12と同じ)。

SELECT col FROM (SELECT *  FROM t1 WHERE bar) t2

単純にWHERE句のサブクエリをサポートしていません。一般的に、任意のサブクエリ(特に相関サブクエリ)は、Sparkを使用してデカルト結合に昇格しないと表現できません。

通常、サブクエリのパフォーマンスは一般的なリレーショナルシステムでは重要な問題であり、すべてのサブクエリはJOINを使用して表現できるため、ここで機能が失われることはありません。

37
zero323

https://issues.Apache.org/jira/browse/SPARK-4226

その機能を実装するためのプルリクエストがあります.. Spark 2.0。

0
Tagar