我有一个Spark数据框,其中包含Timestamp和Machine ID。我希望从每个组中删除最低时间戳值。我尝试了以下代码:
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中这样做的同义方法是什么?
答案 0 :(得分:1)
Spark 1.6.1的编程指南显示了Spark 1.6.1中支持和不支持的Hive功能 http://spark.apache.org/docs/latest/sql-programming-guide.html#supported-hive-features
我不会在任何一个类别中看到除外。我在其他地方看到Hive QL不支持EXCEPT,或者至少当时没有。 Hive QL Except clause
也许尝试一个分钟表,然后在答案中做左外连接?
SELECT ts, Machine FROM ts mins LEFT OUTER JOIN ts mins ON (ts.id=mins.id) WHERE mins.id IS NULL;
你也可以使用除了()之外的sparkR内置函数,虽然我认为你需要首先创建你的mins DataFrame
exceptDF <- except(df, df2)