2017-10-10 100 views
0

我在dataframe(d1)中有一列:MODEL_SCORE,其值为nulll7880。 我想在datframe中创建另一个column MODEL_SCORE1,它是MODEL_SCORE的子串。根据另一列的子字符串在数据框中创建列,scala

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

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

回答

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| +---+---------+----+

+0

谢谢,能我这样做没有创建UDF? – muni

+0

您也可以使用df.withColumn(“col2”,substring(df(“col1”),4,3))。show 这里4是字符串中的位置,3是从该位置开始的字符串的总长度。 – vindev

相关问题