基于另一列(scala)的子字符串在数据框中创建列

时间:2017-10-10 11:08:10

标签: sql scala substring

我在dataframe(d1)MODEL_SCORE中有一列,其值类似于nulll7880。 我想在column MODEL_SCORE1中创建另一个datframe,它是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"))

1 个答案:

答案 0 :(得分:0)

一种方法是,您可以定义一个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| +---+---------+----+