动态修剪dataframe scala spark的所有字符串类型列

动态修剪dataframe scala spark的所有字符串类型列,scala,apache-spark,Scala,Apache Spark,嗨,我只想修剪DF的字符串类型列,因为修剪所有列会将非字符串列的数据类型更改为字符串类型。 目前我有两种方法,但我正在寻找一些好的和有效的方法 第一种方法 val trimmedDF = Countrydf.columns.foldLeft(Countrydf) { (memoDF, colName) => memoDF.withColumn(colName, trim(col(colName))) } val exprs = Countrydf.schema.fields.map

嗨,我只想修剪DF的字符串类型列,因为修剪所有列会将非字符串列的数据类型更改为字符串类型。 目前我有两种方法,但我正在寻找一些好的和有效的方法

第一种方法

val trimmedDF = Countrydf.columns.foldLeft(Countrydf) { (memoDF, colName) =>
  memoDF.withColumn(colName, trim(col(colName)))
}

val exprs = Countrydf.schema.fields.map { f => 
  if (trimmedDF.schema.fields.contains(f)) col(f.name)
  else lit(null).cast(f.dataType).alias(f.name) 
}
trimmedDF.select(exprs: _*).printSchema
var Countrydf=Seq((“Virat”,18,“RCB ali shah”),(“Rohit”,45,“MI”),(“DK”,67,“KKR”)。toDF(“队长”,“球衣号码”,“球队”)
乡村秀

对于(name性能方面,我找到的最佳解决方案是

var Countrydf = Seq(("Virat               ",18,"RCB ali shah"),("             Rohit ",45,"MI "),(" DK",67,"KKR ")).toDF("captains","jersey_number","teams")

Countrydf.show

for( name <- Countrydf.schema) {
   if(name.dataType.toString=="StringType")
   Countrydf= Countrydf.withColumn(name.name, trim(col(name.name)))
 } 

var Countrydf=Seq((“Virat”,18,“RCB ali shah”),(“Rohit”,45,“MI”),(“DK”,67,“KKR”)。toDF(“队长”,“球衣号码”,“球队”)
乡村秀
(姓名)