1

タイムスタンプとマシン ID を含む Spark データ フレームがあります。各グループから最も低いタイムスタンプ値を削除したいと考えています。次のコードを試しました:

sqlC <- sparkRHive.init(sc)
ts_df2<- sql(sqlC,"SELECT ts,Machine FROM sdf2 EXCEPT SELECT MIN(ts),Machine FROM sdf2 GROUP BY Machine")

しかし、次のエラーが発生しています。

16/04/06 06:47:52 ERROR RBackendHandler: sql on 35 failed
Error in invokeJava(isStatic = FALSE, objId$id, methodName, ...) : 
org.apache.spark.sql.AnalysisException: missing EOF at 'SELECT' near 'EXCEPT'; line 1 pos 35

何が問題ですか?HiveContext が EXCEPT キーワードをサポートしていない場合、HiveContext で同じことを行う同義の方法は何ですか?

4

1 に答える 1

1

Spark 1.6.1 のプログラミング ガイドには、Spark 1.6.1 でサポートされている Hive 機能とサポートされていない Hive 機能が示されています http://spark.apache.org/docs/latest/sql-programming-guide.html#supported-hive-features

どちらのカテゴリにも EXCEPT はありません。Hive QL が EXCEPT をサポートしていない、または少なくともその時点ではサポートしていないことを他の場所で見ました。 Hive QL 例外句

おそらく、分のテーブルを試してから、その答えのように左外部結合を実行しますか?

SELECT ts, Machine FROM ts mins LEFT OUTER JOIN ts mins ON (ts.id=mins.id) WHERE mins.id IS NULL;

sparkR 組み込み関数 except() を使用することもできますが、最初に mins DataFrame を作成する必要があると思います

exceptDF <- except(df, df2)
于 2016-04-06T22:47:40.650 に答える