SPARK:失败:"联盟"预期但是'('找到了

use*_*076 10 sql scala dataframe apache-spark apache-spark-sql

我有一个名为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)
Run Code Online (Sandbox Code Playgroud)

但是得到以下问题.有帮助吗?

[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
Run Code Online (Sandbox Code Playgroud)

zer*_*323 17

Spark 2.0+

Spark 2.0引入了窗口函数的本机实现(SPARK-8641),因此HiveContext不再需要.然而,与窗口函数无关的类似错误仍然可归因于SQL解析器之间的差异.

Spark <= 1.6

Window 1.4.0中引入了窗口函数,需要HiveContext工作.SQLContext不会在这里工作.

确保使用Spark> = 1.4.0并创建HiveContext:

import org.apache.spark.sql.hive.HiveContext
val sqlContext = new HiveContext(sc)
Run Code Online (Sandbox Code Playgroud)

  • @DanielDarabos在这个特殊情况下,它只是对Hive UDAF的支持.Spark <2.0.0中的所有窗口函数都使用Hive UDAF表示,因此没有HiveContext就无法工作. (2认同)