2017-10-10 104 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

相關問題