このクエリを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を選択してください。
計画機能:
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
を使用して表現できるため、ここで機能が失われることはありません。
https://issues.Apache.org/jira/browse/SPARK-4226
その機能を実装するためのプルリクエストがあります.. Spark 2.0。