Для DataFrame
легко создать новый столбец с некоторой операцией, используя udf
с df.withColumn("newCol", myUDF("someCol"))
. Для того, чтобы сделать что-то подобное в Dataset
, я думаю, я бы использовать функцию map
:Функция карты на наборах данных, оптимизированных для операций над одним столбцом?
def map[U](func: (T) ⇒ U)(implicit arg0: Encoder[U]): Dataset[U]
Вы должны пройти весь корпус класса T
в качестве входных данных для функции. Если у Dataset[T]
много полей/столбцов, было бы очень неэффективно передавать всю строку, если вы просто хотели сделать один дополнительный столбец, работая на одном из многих столбцов T
. Мой вопрос в том, является ли Catalyst достаточно умным, чтобы иметь возможность оптимизировать это?