Я знаю, как это сделать, но я полагаю (или, по крайней мере, надеюсь), что есть более простой и менее шаблонный способ сделать то же самое.
Сценарий:
Employee
+-------+---+------------+
| NAME|AGE|COMPANY_CODE|
+-------+---+------------+
| John| 41| 1|
| Mary| 34| 1|
| Chris| 32| 2|
|Phillip| 22| 2|
| Tony| 44| 1|
+-------+---+------------+
Company
+----+---------+
|CODE| NAME|
+----+---------+
| 1|Company-1|
| 2|Company-2|
| 3|Company-3|
+----+---------+
Моя цель состоит в том, чтобы объединить обе таблицы с помощью employee.company_code и company_code и отобразить employee.name как NAME , employee.age как AGE и company.name как COMPANY_NAME (это часть трюка)
// company columns
final Column companyCode = companyDataSet.col("CODE");
// employee columns
final Column employeeCompanyCode = employeeDataSet.col("COMPANY_CODE");
Dataset<Row> join = employeeDataSet.join(companyDataSet, employeeCompanyCode.equalTo(companyCode));
join = join.drop(companyCode).drop(employeeCompanyCode);
Печать join dataframe, теперь мы получаем:
+-------+---+---------+
| NAME|AGE| NAME|
+-------+---+---------+
| John| 41|Company-1|
| Mary| 34|Company-1|
| Chris| 32|Company-2|
|Phillip| 22|Company-2|
| Tony| 44|Company-1|
+-------+---+---------+
Я не могу использовать метод withColumnRenamed ( join.withColumnRenamed ("NAME", "COMPANY_NAME" ), поскольку у меня есть два столбца с именем NAME, и оба будут переименованы
единственный способ, который я обнаружил, это определить все столбцы, которые я хочу показать, передать все из них, чтобы выбрать метод набора данных, а затем переименовать столбцы, как я хочу:
final Column companyName = companyDataSet.col("NAME");
final Column employeeName = employeeDataSet.col("NAME");
final Column employeeAge = employeeDataSet.col("AGE");
join = join.select(employeeName, employeeAge, companyName.alias("COMPANY_NAME"));
+-------+---+------------+
| NAME|AGE|COMPANY_NAME|
+-------+---+------------+
| John| 41| Company-1|
| Mary| 34| Company-1|
| Chris| 32| Company-2|
|Phillip| 22| Company-2|
| Tony| 44| Company-1|
+-------+---+------------+
ВВ этом конкретном случае нет ничего сложного в определении всех столбцов, которые я хочу выбрать, поскольку они представляют собой всего несколько столбцов,но представьте себе в таблицах с пучками столбцов.Определение множества столбцов из-за переименования одного несчастного столбца слишком болезненно.
Есть идеи, как мне этого избежать?