У меня есть 2 таблицы Employees (Id, Name), EmployeeSalary (EmployeeId, Designation, Salary). Один сотрудник может занимать несколько должностей в компании и получать несколько зарплат. Как мне получить EmployeeId, имя, сумму зарплат, последовательность всех обозначений.

То, что я пробовал до сих пор,

    employeeDS.join(employeeSalaryDS, employeeDS.col("Id")
.equalTo(employeeSalaryDS.col("EmployeeId")),"left_outer")
.groupBy(employeeDS.col("Id")).agg(sum("Salary") as "Sum of salaries")
0
Ankit 5 Окт 2018 в 17:58

1 ответ

Лучший ответ

Что-то вроде этого

scala> val dfe = Seq((101,"John"),(102,"Mike"), (103,"Paul"), (104,"Tom")).toDF("id","name")
dfe: org.apache.spark.sql.DataFrame = [id: int, name: string]

scala> val dfes = Seq((101,"Dev", 4000),(102,"Designer", 4000),(102,"Architect", 5000), (103,"Designer",6000), (104,"Consultant",8000), (104,"Supervisor",9000), (104,"PM",10000) ).toDF("id","desig","salary")
dfes: org.apache.spark.sql.DataFrame = [id: int, desig: string ... 1 more field]

scala> dfe.join(dfes, dfe.col("id").equalTo(dfes.col("id")),"left_outer").groupBy(dfe.col("Id")).agg(sum("Salary") as "Sum of salaries", collect_list('desig as "desig_list")).show(false)
+---+---------------+-----------------------------------+
|Id |Sum of salaries|collect_list(desig AS `desig_list`)|
+---+---------------+-----------------------------------+
|101|4000           |[Dev]                              |
|103|6000           |[Designer]                         |
|102|9000           |[Architect, Designer]              |
|104|27000          |[PM, Supervisor, Consultant]       |
+---+---------------+-----------------------------------+


scala>
1
stack0114106 5 Окт 2018 в 15:48