我在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"))
答案 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|
+---+---------+----+