簡體   English   中英

動態修剪數據幀 scala spark 的所有字符串類型列

[英]trimming all string type columns dynamically of dataframe scala spark

嗨,我只想修剪 DF 的字符串類型列,因為修剪所有列會將非字符串列的數據類型更改為字符串類型。 我目前有兩種方法可以做到這一點,但正在尋找一些好的和有效的方法。

第一種方法

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)))
 } 

第二種方法

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("captains","jersey_number","teams")

Countrydf.show

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM