2015-06-03 3 views
0

Я использую искру 1.3.1, в питона, у меня есть что-то вроде этих:SparkSQL Ошибка выбора для некоторых полей

t1=sqlCtx.createDataFrame(sizes, ["id", "sum"]) 

t1.registerTempTable("t1") 

t1.take(1) <-- will show [Row(id=u'5b9a9171fde001c3d9b', sum=5)] 

Теперь я могу сделать sqlCtx.sql("select id from t1")

, но я не могу получить доступ к «сумма », когда я sqlCtx.sql("select sum from t1"), он будет генерировать следующее сообщение об ошибке:

py4j.protocol.Py4JJavaError: An error occurred while calling o99.sql. 
: java.lang.RuntimeException: [1.12] failure: ``('' expected but 
`from' found 
select sum from t1 
    ^
    at scala.sys.package$.error(package.scala:27) 

Любая идея?

ответ

0

В большинстве диалектов SQL SUM является зарезервированным ключевым словом, которое используется как функция в агрегированных операциях (например, что-то вроде SELECT SUM(foo) FROM bar WHERE foo > 3). Это означает, что только SUM является недопустимым выражением, поскольку парсер SQL ожидает, что столбец будет являться параметром, который должен быть агрегирован.

Чтобы указать, что вы имеете в виду в колонке имени sum, а не функцию sum, пытаются сбежать от имени столбца обратные кавычки:

sqlCtx.sql("select `sum` from t1") 
+0

Ах !! Я действительно хотел ударить себя, я потратил около 2 часов, пытаясь понять проблему. Спасибо, сейчас работает. – Tara

+0

Счастливые помочь. Не стесняйтесь принимать ответ, если он ответил на ваш вопрос. – helmbert

Смежные вопросы