Spark 1.5.2: org.apache.spark.sql.AnalysisException: nicht-operator 'Union;
Habe ich zwei dataframes df1
und df2
. Beide haben das folgende schema:
|-- ts: long (nullable = true)
|-- id: integer (nullable = true)
|-- managers: array (nullable = true)
| |-- element: string (containsNull = true)
|-- projects: array (nullable = true)
| |-- element: string (containsNull = true)
df1
erstellt von einem avro-Datei, während df2
aus einer entsprechenden Parkett-Datei. Allerdings, Wenn ich ausführen, df1.unionAll(df2).show()
, bekomme ich die folgende Fehlermeldung:
org.apache.spark.sql.AnalysisException: unresolved operator 'Union;
at org.apache.spark.sql.catalyst.analysis.CheckAnalysis$class.failAnalysis(CheckAnalysis.scala:37)
at org.apache.spark.sql.catalyst.analysis.Analyzer.failAnalysis(Analyzer.scala:44)
at org.apache.spark.sql.catalyst.analysis.CheckAnalysis$$anonfun$checkAnalysis$1.apply(CheckAnalysis.scala:174)
at org.apache.spark.sql.catalyst.analysis.CheckAnalysis$$anonfun$checkAnalysis$1.apply(CheckAnalysis.scala:49)
at org.apache.spark.sql.catalyst.trees.TreeNode.foreachUp(TreeNode.scala:103)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lief ich in der gleichen situation und es stellt sich heraus, dass nicht nur die Felder müssen die gleichen sein, aber auch Sie halten müssen, um die exakt gleiche Reihenfolge der Felder in beiden dataframe, um es zu schaffen.
Dies ist alt und es gibt bereits einige Antworten herumliegen, aber ich habe gerade konfrontiert dieses problem beim Versuch, eine union der beiden dataframes wie in...
Wie andere erwähnt haben, um Angelegenheiten. Also wähle die richtigen Spalten in der gleichen Reihenfolge als Links dataframe Spalten
Fand ich folgende PR auf github
https://github.com/apache/spark/pull/11333.
Bezieht
UDF
(user defined function) - Spalten, die nicht korrekt behandelt, während die union, und damit dazu führen, dass die union zu scheitern. Die PR behebt es, aber es hat keinen Funken1.6.2
, ich habe nicht überprüft, aufspark 2.x
noch.Wenn Sie fest sind auf
1.6.x
es eine blöde Arbeit um, Karte derDataFrame
zu einemRDD
und zurück zu einemDataFrame