Это выполняется,
val r = sql("SELECT T.* FROM ( VALUES ('xx','xxx','2019-01-01'), ('xxxx','yyyy','2019-01-02') ) T")
, но r имеют столбцы "без имени", обозначенные как col1| col2| col3
. В стандартном SQL я могу выражать имена как параметры таблицы, что-то вроде T(a,b,c)
вместо T
... Но это,
val r = sql("SELECT T.* FROM ( VALUES ('xx','xxx','2019-01-01'), ('xxxx','yyyy','2019-01-02') ) T(a,b,c)")
не работает, это ужасное сообщение об ошибке , не говорите о правильном синтаксисе Spark для него ...
Вопрос "Как выразить имена столбцов?" , и мне нужен пример, который я могу запустить в spark-shell v2.2.
Примечания
Уродливое сообщение:
org.apache.spark.sql.catalyst.parser.ParseException:
mismatched input '(' expecting {<EOF>, ',', 'WHERE', 'GROUP', 'ORDER', 'HAVING', 'LIMIT', 'JOIN', 'CROSS', 'INNER', 'LEFT', 'RIGHT', 'FULL', 'NATURAL', 'LATERAL', 'WINDOW', 'UNION', 'EXCEPT', 'MINUS', 'INTERSECT', 'SORT', 'CLUSTER', 'DISTRIBUTE', 'ANTI'}(line 1, pos 73)
== SQL ==
SELECT T.*, 'aaa' as chk FROM ( VALUES ('xx','xxx','2019-01-01') ) T (a,b,c)
----------------------------------------------------------------------^^^
at org.apache.spark.sql.catalyst.parser.ParseException.withCommand(ParseDriver.scala:217)
at org.apache.spark.sql.catalyst.parser.AbstractSqlParser.parse(ParseDriver.scala:114)
at org.apache.spark.sql.execution.SparkSqlParser.parse(SparkSqlParser.scala:48)
at org.apache.spark.sql.catalyst.parser.AbstractSqlParser.parsePlan(ParseDriver.scala:68)
at org.apache.spark.sql.SparkSession.sql(SparkSession.scala:637)
... 50 elided