Sql 基于另一列scala的子字符串在数据帧中创建列

Sql 基于另一列scala的子字符串在数据帧中创建列,sql,scala,substring,Sql,Scala,Substring,我在数据帧(d1)中有一列:MODEL\u SCORE,它的值类似于nulll7880。 我想在datframe中创建另一个列MODEL\u SCORE 1,它是MODEL\u SCORE的子字符串 我正在尝试这个。它正在创建列,但未给出预期结果: val x=d1.withColumn("MODEL_SCORE1", substring(col("MODEL_SCORE"),0,4)) val y=d1.select(col("MODEL_SCORE"), substring(col("MO

我在数据帧(d1)中有一列:
MODEL\u SCORE
,它的值类似于
nulll7880
。 我想在
datframe
中创建另一个
列MODEL\u SCORE 1
,它是
MODEL\u 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"))

一种方法是,您可以定义一个自定义项,它将根据需要拆分列字符串值。示例代码如下所示:

val df=sc.parallelize(列表((1,“nulll7880”),(2,“null9000”)).toDF(“id”,“col1”)
df.显示

//输出

+---+---------+
|id | col1|
+---+---------+
|1 | nulll7880|
|2 |零9000|
+---+---------+

defsplitstring:(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 |空L7880 |空|
|2 |空9000 |空|

+---+---------+----+

谢谢,我可以不创建自定义项就完成吗?您也可以使用df.withColumn(“col2”,substring(df(“col1”),4,3))。这里显示4是字符串中的位置,3是该位置的字符串总长度。