Я написал метод фильтрации кадра данных с использованием выражений SQL.Так как некоторые sqlStr
могут содержать подстроки, указывающие, что это выражение не должно использоваться при фильтрации, я решил добавить условие, чтобы исключить выражения.
Но возвращая None
в случае, если выражение содержит нежелательную подстрокуприводит к ошибке: expression of type Serializable doesn't conform to expected type DataSet[Row].
Я думал, что getOrElse
с этим справится, так что в случае None он вернет значение по умолчанию basicMetricsDF
.Что не так с моим пониманием здесь и что должно быть улучшено?
Другой вариант, который я вижу, - это возвращать basicMetricsDF
в другом месте вместо None.Будет ли это правильный путь?
// sqlStr is an Option[String]
val filteredMetricsDF: Dataset[Row] = sqlStr.map { s =>
basicMetricsDF
// Filtering rows with the SQL expression
.where(s)
}.getOrElse(basicMetricsDF)
// Modified method to exclude some expressions
val filteredMetricsDF: Dataset[Row] = sqlStr.map { s =>
if (!StringUtils.containsIgnoreCase(x, "excludedSqlExpr")) {
basicMetricsDF
// Filtering rows with the SQL expression
.where(s)} else None
}.getOrElse(basicMetricsDF)