Spark - метод для исключения некоторых выражений при фильтрации строк в DataFrame - PullRequest
0 голосов
/ 20 марта 2019

Я написал метод фильтрации кадра данных с использованием выражений 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)
...