¿SparkSQL admite subconsultas?
apache-spark subquery (2)
https://issues.apache.org/jira/browse/SPARK-4226
Hay una solicitud de extracción para implementar esa característica ... supongo que podría aterrizar en Spark 2.0.
Estoy ejecutando esta consulta en Spark Shell pero me da un error,
sqlContext.sql(
"select sal from samplecsv where sal < (select MAX(sal) from samplecsv)"
).collect().foreach(println)
error:
java.lang.RuntimeException: [1.47] error: ``) '''' esperado pero identificador MAX encontrado
seleccione sal de samplecsv donde sal <(seleccione MAX (sal) de samplecsv) ^ en scala.sys.package $ .error (package.scala: 27) ¿Alguien puede explicarme, gracias
Características planificadas :
- SPARK-23945 (Column.isin () debe aceptar un DataFrame de una sola columna como entrada).
- SPARK-18455 (Soporte general para el procesamiento de subconsultas correlacionadas).
Spark 2.0+
Spark SQL debe admitir subconsultas correlacionadas y no correlacionadas.
Ver
SubquerySuite
para más detalles.
Algunos ejemplos incluyen:
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)
Desafortunadamente, por ahora (Spark 2.0) es imposible expresar la misma lógica usando
DataFrame
DSL.
Chispa <2.0
Spark admite subconsultas en la cláusula
FROM
(igual que Hive <= 0.12).
SELECT col FROM (SELECT * FROM t1 WHERE bar) t2
Simplemente no admite subconsultas en la cláusula
WHERE
En general, las subconsultas arbitrarias (en particular las subconsultas correlacionadas) no se pueden expresar usando Spark sin promocionar la unión cartesiana.
Dado que el rendimiento de las subconsultas suele ser un problema importante en un sistema relacional típico y cada subconsulta puede expresarse utilizando
JOIN
aquí no hay pérdida de función.