我是HIVE和SPARK的新手。
考虑我在SQL中有以下查询。
select col1, col2, min(col3), first(col4) from tablename group by col1, col2
因为我不想将col4包含在第一组中(col4)(但我希望显示col4)
我想在Hive中编写相同的查询,但是在hive中没有第一个函数。
参考:https://docs.treasuredata.com/articles/hive-aggregate-functions
我想在 Spark SQL (使用数据帧)中编写相同的查询。
类似地,在火花聚合函数中没有第一个函数。 (*可用的汇总方法为avg
,max
,min
,sum
,count
。*)
参考:org.apache.spark.sql.GroupedData
E.g。 :
val df1 = sqlContext.sql(" select * from TABLENAME").groupBy("COL1","COL2").agg("COL3" -> "MIN", "COL4" -> "????")
有没有办法用蜂巢和火花写同样的东西?
答案 0 :(得分:1)
如果您不想在col4
中加入group by
并将其与sum()
一起包含在内,则需要使用分析功能:
select col1,
col2,
min(col3) over (partition by col1, col2) as min_col3,
col4
from tablename;
请参阅此处的文档:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+WindowingAndAnalytics
答案 1 :(得分:1)
double
或
select col1
,col2
,s34.col3
,s34.col4
from (select col1
,col2
,min(named_struct('col3',col3,'col4',col4)) as s34
from tablename
group by col1
,col2
) t
;
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF