Как выполнить оператор select top 1 x from table в spark sql

Я столкнулся с проблемой преобразования следующего запроса в spark-sql в SQL-сервере pyspark.

coalesce((Select top 1 f2.ChargeAmt from Fact_CMCharges f2
        where f2.BldgID = f.BldgID 
        and f2.LeaseID = f.LeaseID
        and f2.IncomeCat = f.IncomeCat
        and f2.Period < f.Period
        and f2.ActualProjected = 'Lease'
        order by f2.Period desc),0) as Charge

Я не нашел замены ключевого слова top в pyspark sql. Пожалуйста, помогите мне, как я могу преобразовать этот запрос в py-spark sql


person Kalyan    schedule 01.11.2016    source источник
comment
Я не знаком с sql-сервером. Не могли бы вы объяснить, что он делает, и ссылку на его документацию?   -  person eliasah    schedule 01.11.2016
comment
ну, как я понял, «верх» работает как ключевое слово limit в MYSQL. здесь эта команда фактически выбирает верхнюю 1 строку из заданного условия в предложении where. оператор объединения выполнит этот оператор, если он истинен, или вернет 0 по умолчанию.   -  person Kalyan    schedule 01.11.2016
comment
Можете ли вы привести пример входных данных и ожидаемого результата, потому что это все еще не очень ясно.   -  person eliasah    schedule 01.11.2016
comment
w3schools.com/sql/ по этой ссылке показан сервер sql пример "высшего утверждения"   -  person Kalyan    schedule 01.11.2016


Ответы (1)


Поскольку вы сказали Spark-SQL и если у вас есть «DF», вы можете использовать что-то вроде этого.

df.limit(1).show()
person Shankar    schedule 01.11.2016
comment
Спасибо за ответ . хотя я не пробовал подход к фрейму данных, но я написал ограничение 1 в конце запроса sql. и я получил это сообщение об ошибке pyspark.sql.utils.AnalysisException: u'Коррелированные скалярные подзапросы должны быть агрегированы: GlobalLimit 1\n+- LocalLimit 1\n - person Kalyan; 01.11.2016