【问题标题】:How to change the column values of a DataFrame into title case in scala .如何在 scala 中将 DataFrame 的列值更改为标题大小写。
【发布时间】:2018-06-28 03:20:56
【问题描述】:

输入数据帧

val ds = Seq((1,"play framework"),
  (2,"spark framework"),
  (3,"spring framework ")).toDF("id","subject")

我希望列 subject 上的 title case 如下所示。

 val ds = Seq((1,"Play Framework"),
  (2,"Spark Framework"),
  (3,"Spring Framework ")).toDF("id","subject")

我可以使用 org.apache.spark.sql.functions 中的 Use lower function

点赞ds.select($"subject", lower($"subject")).show

转换成小写。但是我怎样才能得到我预期的结果呢?

【问题讨论】:

    标签: scala apache-spark dataframe


    【解决方案1】:

    有一个名为initcap内置函数,它完全符合您的要求

    import org.apache.spark.sql.functions._
    ds.withColumn("subject", initcap(col("subject"))).show(false)
    

    official documentation 这么说

    public static Column initcap(Column e) Returns a new string column by converting the first letter of each word to uppercase. Words are delimited by whitespace.

    【讨论】:

    • 你能知道使用用户定义的函数还是内置函数会提供相同的性能?
    • 内置函数经过优化,可以在列上运行。虽然用户定义的函数在行上工作,并且需要对行中的每个选定元素进行序列化和反序列化,所以内置函数的性能比 udf 好得多,我总是推荐内置函数到 udf 函数
    【解决方案2】:

    你可以这样做

    val captalizeUDF=udf((str:String)=>str.split(" ").map(word=>word.trim.capitalize).mkString(" "))
    
    ds.select($"id",captalizeUDF($"subject").alias("subject")).show
    
                         or
    
    ds.select($"id",initcap($"subject").alias("subject")).show
    

    示例输出:

    +---+----------------+
    | id|         subject|
    +---+----------------+
    |  1|  Play Framework|
    |  2| Spark Framework|
    |  3|Spring Framework|
    +---+----------------+
    

    【讨论】:

    • Ramesh,解释得很好。
    • @Manoj Kumar Dhakd ,假设数据框中的列是 "prodId" , "price" .....当前 "price" 存储在字符串中,如何将其转换为 6 精度的 Double?
    猜你喜欢
    • 2010-11-24
    • 2017-09-15
    • 2019-06-11
    • 1970-01-01
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    • 2010-09-25
    • 2011-10-06
    相关资源
    最近更新 更多