val customDF = df.select(df.columns.filter(colName => checkname(colName)) .map(colName => new Column(colName)): _*)
, где checkname - простая пользовательская функция, которая возвращает colname, если совпадает, и null, если нет. Используйте свой шаблон для проверки внутри этой функции.
def checkname () : [return type] = {
return [expr]
}