SPARK: отказ: “ union '' ожидается, но `('found

У меня есть dataframe, называемый df с столбцом с именем employee_id. Я делаю:

df.registerTempTable("d_f") val query = """SELECT *, ROW_NUMBER() OVER (ORDER BY employee_id) row_number FROM d_f""" val result = Spark.getSqlContext().sql(query) 

Но проблема следующая. Любая помощь?

 [1.29] failure: ``union'' expected but `(' found SELECT *, ROW_NUMBER() OVER (ORDER BY employee_id) row_number FROM d_f ^ java.lang.RuntimeException: [1.29] failure: ``union'' expected but `(' found SELECT *, ROW_NUMBER() OVER (ORDER BY employee_id) row_number FROM d_f 

Spark 2.0+

Spark 2.0 представляет собой собственную реализацию оконных функций ( SPARK-8641 ), поэтому HiveContext больше не требуется. Тем не менее подобные ошибки, не связанные с функциями окна, все же могут быть отнесены к различиям между синтаксическими анализаторами SQL.

Искры <= 1,6

Функции окна были введены в Spark 1.4.0 и требуют, чтобы HiveContext работал. SQLContext не будет работать здесь.

Убедитесь, что вы используете Spark> = 1.4.0 и создаете HiveContext :

 import org.apache.spark.sql.hive.HiveContext val sqlContext = new HiveContext(sc) 

Да, это правда,

Я использую искру версии 1.6.0, и вам нужен HiveContext для реализации метода «dense_rank».

Из Spark 2.0.0 на словах не будет больше метода «dense_rank».

Итак, для Spark 1.4.1.6 <2.0 вы должны применить это.

table hive_employees с тремя полями :: place: String, name: String, зарплата: Int

val conf = new SparkConf (). setAppName ("тест denseRank") // setMaster ("local")

 val sc = new SparkContext(conf) val sqlContext = new SQLContext(sc) val hqlContext = new org.apache.spark.sql.hive.HiveContext(sc) 

val result = hqlContext.sql ("select empid, empname, dense_rank () over (разделение посредством empsalary order by empname) как rank from hive_employees")

result.show ()