[英]select a column and frequency of column value in spark scala or spark java
我有一張下面的桌子。
select * from employee;
eid salary location
1003 1007 wyd
1006 1009 mah
1008 1100 ind
1009 1100 mah
1010 1100 mah
我需要找到類似薪水的頻率(表中有多少個薪水相同的薪水)和位置以及開齋節
在蜂巢中,我編寫了如下查詢,並且該查詢有效。
hive> select eid, count (*) over (partition by salary) as levelCount, count(*) over (partition by location) as areacount from employee;
1003 1 1
1006 1 3
1008 3 1
1009 3 3
1010 3 3
如何通過對數據幀進行操作在spark中編寫類似的代碼。
您可以使用以下簡單的window
功能
import org.apache.spark.sql.functions._
import org.apache.spark.sql.expressions._
def commonWindowSpec(colName: String) = Window.partitionBy(colName)
df.select(col("eid"), count("salary").over(commonWindowSpec("salary")).as("levelCount"), count("location").over(commonWindowSpec("location")).as("areacount")).show(false)
它幾乎與您在配置單元sql中使用查詢的條件相同。
您應該獲得以下輸出
+----+----------+---------+
|eid |levelCount|areacount|
+----+----------+---------+
|1008|3 |1 |
|1009|3 |3 |
|1010|3 |3 |
|1003|1 |1 |
|1006|1 |3 |
+----+----------+---------+
我希望答案是有幫助的
我有同樣的問題,我在下面的代碼中解決了它:
public Dataset<Row> frequencyValuesAnalysisWOLim(Dataset<Row> dataSet, String attribute) {
return dataSet.groupBy(col(attribute)).agg(size(collect_list(attribute))
.as("count")).select(col(attribute), col("count")).orderBy(col("count").desc());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.