HIVE 中的 FIRST() 或 LAST() 聚合函数

Sam*_*Sam 5 mysql hive apache-spark apache-spark-sql spark-dataframe

我是 HIVE 和 SPARK 的新手。

考虑我在 SQL 中有以下查询。

select col1, col2, min(col3), first(col4) from tablename group by col1, col2
Run Code Online (Sandbox Code Playgroud)

因为我不想将 col4 包含在组中,所以我首先采用了(col4)(但我希望显示 col4)

  1. 我想在 Hive 中编写相同的查询,但在 Hive 中没有第一个函数。

    参考:https : //docs.treasuredata.com/articles/hive-aggregate-functions

  2. 我想在Spark SQL 中编写相同的查询(使用数据帧)。同样,在 spark 聚合函数中也没有第一个函数。(* 可用的聚合方法有avg, max, min, sum, count. *)

参考:org.apache.spark.sql.GroupedData

例如: val df1 = sqlContext.sql(" select * from TABLENAME").groupBy("COL1","COL2").agg("COL3" -> "MIN", "COL4" -> "????")

有没有办法用 hive 和 spark 写同样的东西?

lef*_*oin 2

如果您不想将其col4包含group by在 select 中sum(),则需要分析功能:

select col1, 
       col2, 
       min(col3) over (partition by col1, col2) as min_col3,
       col4 
  from tablename;
Run Code Online (Sandbox Code Playgroud)

请参阅此处的文档: https: //cwiki.apache.org/confluence/display/Hive/LanguageManual+WindowingAndAnalytics