Select 行,除了使用 HiveContext 在 Spark 中包含最小值的行

Select rows except the one that contains min value in Spark using HiveContext

我有一个包含时间戳和机器 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 中执行相同操作的同义方式是什么?

Spark 1.6.1 的编程指南显示了 Spark 1.6.1 中支持和不支持的 Hive 功能 http://spark.apache.org/docs/latest/sql-programming-guide.html#supported-hive-features

我在这两个类别中都没有看到 EXCEPT。我在别处看到 Hive QL 不支持 EXCEPT,或者至少当时不支持。 Hive QL Except clause

也许尝试 table 分钟,然后按照该答案进行左外连接?

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)