Мне нравятся Spark Datasets, поскольку они дают мне ошибки анализа и синтаксические ошибки во время компиляции, а также позволяют мне работать с геттерами вместо жестко закодированных имен/чисел. Большинство вычислений можно выполнить с помощью высокоуровневых API-интерфейсов Datasets. Например, гораздо проще выполнять операции 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 и дает этим функциям предоставить мне правильное имя столбца как String. Поэтому я бы использовал первую строку кода, но вместо функции с жестко закодированным именем столбца помещал функцию. Но это не кажется достаточно элегантным.
Может ли кто-нибудь посоветовать мне другие варианты здесь? Цель состоит в том, чтобы иметь абстрагирование от фактических имен столбцов и работать предпочтительно с помощью геттеров класса case.
Я использую Spark 1.6.1 и Scala 2.10