【发布时间】:2018-09-06 20:08:44
【问题描述】:
我有一个 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 问题 - 当数据帧的列数未知时,对数据帧中的每一列执行 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 假设返回一个字符串,并期望输入是列中的一个值。因此,它将标准化整个数据帧每一行中的每个值。
【问题讨论】:
标签: scala apache-spark apache-spark-sql