2017-08-25 105 views
0

在這個問題上,我們有兩個經理M1和M2,在球隊經理的M1有兩個員工E1 & E2和團隊M2的有兩個員工E4 & E5以下是經理和員工層次,分析Spark中數據幀

 
1) M1 
    a. e1 
    b. e2 

2) M2 
    a. e4 
    b. e5 

而且,我們有以下的員工,工資數據幀

 
+------+--------+------+---------+ 
|emp_id|month_id|salary|work_days| 
+------+--------+------+---------+ 
|e1 |1  |66000 |22  | 
|e1 |2  |48000 |16  | 
|e1 |3  |87000 |29  | 
|e2 |1  |75000 |25  | 
|e2 |4  |69000 |23  | 
|e2 |5  |66000 |22  | 
|e4 |1  |90000 |30  | 
|e4 |2  |87000 |29  | 
|e5 |3  |72000 |24  | 
|e5 |1  |57000 |19  | 
|e5 |4  |51000 |17  | 
|e5 |5  |69000 |23  | 
+------+--------+------+---------+ 

尋找新的數據框與下面的規則

規則1-管理器可以看到他的團隊

規則2 work_days - 員工可以看到他的work_days和工資

+0

那麼,什麼是你的問題? –

+0

那麼你曾經嘗試過什麼,不工作? –

+0

嗨,@Juan找到使用上面的Dataframe – prakash

回答

1

據我從你的問題的理解,這就是我建議你做的事。

首先,你需要根據他們創造與員工的經理dataframes作爲

manager1

+---+------+ 
|sn |emp_id| 
+---+------+ 
|a |e1 | 
|b |e2 | 
+---+------+ 

manager2

+---+------+ 
|sn |emp_id| 
+---+------+ 
|a |e4 | 
|b |e5 | 
+---+------+ 

那麼你應該寫,將返回員工列表功能作爲經理下的

import org.apache.spark.sql.functions._ 
def getEmployees(df : DataFrame): List[String] = { 
    df.select(collect_list("emp_id")).first().getAs[mutable.WrappedArray[String]](0).toList 
} 

最後一步是寫,如果你想看到下manager1(M1)的員工,將過濾只有員工

def getEmployeeDetails(df: DataFrame, list: List[String]) : DataFrame ={ 
    df.filter(df("emp_id").isin(list: _*)) 
} 
現在

通過了一項功能,那麼

getEmployeeDetails(df, getEmployees(m1)).show(false) 

將返回

+------+--------+------+---------+ 
|emp_id|month_id|salary|work_days| 
+------+--------+------+---------+ 
|e1 |1  |66000 |22  | 
|e1 |2  |48000 |16  | 
|e1 |3  |87000 |29  | 
|e2 |1  |75000 |25  | 
|e2 |4  |69000 |23  | 
|e2 |5  |66000 |22  | 
+------+--------+------+---------+ 

你能爲其他管理人員做同樣的太

你能爲員工做同樣也爲

getEmployeeDetails(df, List("e1")).show(false) 

將返回employee1(E1)的數據幀

+------+--------+------+---------+ 
|emp_id|month_id|salary|work_days| 
+------+--------+------+---------+ 
|e1 |1  |66000 |22  | 
|e1 |2  |48000 |16  | 
|e1 |3  |87000 |29  | 
+------+--------+------+---------+ 

我希望答案是有幫助的