FUNKE : Fehler: `union" erwartet, aber `(' gefunden
Ich habe einen dataframe df genannt mit Spalte mit dem Feld "employee_id". Ich bin dabei:
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)
Aber immer Folgendes Problem. Keine Hilfe?
[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
- funktioniert die Abfrage funktioniert, wenn Sie direkt in Db?
SELECT t.*, ROW_NUMBER() OVER (ORDER BY employee_id) row_number FROM d_f as t
- Abfrage ist in Ordnung. Sie sind immer Fehler im anderen Teil und nicht hier. Poste den kompletten query.
- wie aliasing die Tabelle wäre hier eine Lösung?
- Habe ich noch nicht getestet, aber logisch sollte es nicht der Fall sein. Da die Abfrage beinhaltet nur eine Tabelle aliasing ist gar nicht notwendig; in anderen Worten, in keiner Weise die DB-engine erhalten würde, die Unklarheit der Bezüge.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Spark 2.0+
Spark 2.0 stellt native Implementierung von Fenster-Funktionen (SPARK-8641) so
HiveContext
sollte nicht mehr erforderlich. Trotzdem ähnliche Fehler auf, die nicht mit der window-Funktion, kann immer noch zurückzuführen auf die Unterschiede zwischen SQL-Parser.Funke <= 1.6
Window-Funktionen eingeführt wurden, Spark 1.4.0 und erfordern
HiveContext
zu arbeiten.SQLContext
funktioniert hier nicht.Werden Sie sicher, dass Sie Sie verwenden Funke >= 1.4.0 und erstellen die
HiveContext
:sc
ist SparkContext.Ja, Es ist wahr,
Ich benutze Funken version 1.6.0 und da braucht man eine HiveContext zur Umsetzung der "dense_rank' - Methode.
Vom Spark 2.0.0 auf Worte wird es nicht mehr "dense_rank' - Methode.
Also für Spark 1.4,1.6 <2.0 sollten Sie anwenden, wie dieses.
Tabelle hive_employees mit drei Feldern ::
Ort : String,
name : String,
Gehalt : Int
val conf = new SparkConf().setAppName("denseRank test")//.setMaster("local")
val Ergebnis = hqlContext.sql("select empid,empname, dense_rank() over(partition by empsalary, um durch empname) als Rang von hive_employees")
Ergebnis.show()