[英]How to dynamically add columns based on source columns in spark scala dataframe
[英]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.