簡體   English   中英

在Spark Scala或Spark Java中選擇一個列和列值的頻率

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM