【问题标题】:Creating a column in a dataframe based on substring of another column, scala根据另一列的子字符串在数据框中创建一列,scala
【发布时间】:2017-10-10 11:08:10
【问题描述】:

我在dataframe(d1) 中有一个列:MODEL_SCORE,其值类似于nulll7880。 我想在datframe 中创建另一个column MODEL_SCORE1,它是MODEL_SCORE 的子字符串。

我正在尝试这个。它正在创建列,但没有给出预期的结果:

val x=d1.withColumn("MODEL_SCORE1", substring(col("MODEL_SCORE"),0,4))

val y=d1.select(col("MODEL_SCORE"), substring(col("MODEL_SCORE"),0,4).as("MODEL_SCORE1"))

【问题讨论】:

    标签: sql scala substring


    【解决方案1】:

    一种方法是您可以定义一个 UDF,该 UDF 将根据您的需要拆分列字符串值。示例代码如下,

    val df = sc.parallelize(List((1,"nulll7880"),(2,"null9000"))).toDF("id","col1") df.show

    //输出

    +---+---------+ | id| col1| +---+---------+ | 1|nulll7880| | 2| null9000| +---+---------+

    def splitString:(String => String) = {str => str.slice(0,4)} val splitStringUDF = org.apache.spark.sql.functions.udf(splitString) df.withColumn("col2",splitStringUDF(df("col1"))).show

    //输出

    +---+---------+----+ | id| col1|col2| +---+---------+----+ | 1|nulll7880|null| | 2| null9000|null| +---+---------+----+

    【讨论】:

    • 谢谢,不创建UDF可以吗?
    • 也可以使用 df.withColumn("col2",substring(df("col1"),4,3)).show 这里4是字符串中的位置,3是总长度从那个位置开始的字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-20
    • 2017-03-18
    • 2019-12-18
    相关资源
    最近更新 更多