У меня есть UDF:
val TrimText = (s: AnyRef) => {
//does logic returns string
}
И датафрейм:
var df = spark.read.option("sep", ",").option("header", "true").csv(root_path + "/" + file)
Я хотел бы выполнить TrimText
для каждого значения в каждом столбце в кадре данных.
Однако проблема в том, что у меня динамическое количество столбцов. Я знаю, что могу получить список столбцов по df.columns
. Но я не уверен, как это поможет мне с моей проблемой. Как я могу решить эту проблему?
TLDR Issue - выполнение UDF для каждого столбца в кадре данных, когда в кадре данных есть неизвестное количество столбцов
Попытка использования:
df.columns.foldLeft( df )( (accDF, c) =>
accDF.withColumn(c, TrimText(col(c)))
)
Выдает эту ошибку:
error: type mismatch;
found : String
required: org.apache.spark.sql.Column
accDF.withColumn(c, TrimText(col(c)))
TrimText
предполагается, что возвращает строку, и ожидает, что ввод будет значением в столбце. Таким образом, он будет стандартизировать каждое значение в каждой строке всего фрейма данных.