Выполните типизированное объединение в Scala с наборами данных Spark

Мне нравятся наборы данных Spark, так как они дают мне ошибки анализа и синтаксические ошибки во время компиляции, а также позволяют мне работать с геттерами вместо жестко заданных имен / чисел. Большинство вычислений можно выполнить с помощью высокоуровневых API-интерфейсов Dataset. Например, гораздо проще выполнитьagg, select, sum, avg, map, filter или groupBy операции с помощью доступа к типизированным объектам набора данных, чем с использованием полей данных строк RDD.

Однако операция соединения отсутствует, я прочитал, что я могу сделать соединение, как это

ds1.joinWith(ds2, ds1.toDF().col("key") === ds2.toDF().col("key"), "inner")

Но это не то, что я хочу, так как я бы предпочел сделать это через интерфейс класса case, так что-то вроде этого

ds1.joinWith(ds2, ds1.key === ds2.key, "inner")

На данный момент лучшая альтернатива, кажется, заключается в создании объекта рядом с классом case и предоставлении этой функции для предоставления мне правильного имени столбца в виде строки. Так что я бы использовал первую строку кода, но поставил бы функцию вместо жестко закодированного имени столбца. Но это не выглядит достаточно элегантно ..

Может кто-нибудь посоветовать мне другие варианты здесь? Цель состоит в том, чтобы получить абстракцию от фактических имен столбцов и работать предпочтительно через геттеры класса case.

Я использую Spark 1.6.1 и Scala 2.10

Ответы на вопрос(2)

Ваш ответ на вопрос