使用下面的代码将dataFrame中的一列拆分为2列时,我尝试了两种类型的代码,但是在运行程序时都遇到了错误。在IteliJ屏幕中,它没有显示错误(表示没有红色标记)但是在运行时会在控制台上显示错误。 我的数据框是: + --------- + |包装时间| + --------- + | 19.674 | | 11.466 | | 263.697 |
代码:1
val df2= df.withColumn("nested", split(col("Wrap Time"), "."))
.withColumn("Call Completion Code_1", $"nested".getItem(0))
.withColumn("Call Completion Code_2", $"nested".getItem(1))
.withColumn("Call Completion Code_3", $"nested".getItem(2))
.drop("nested")
错误:(26,43)找不到参数impl的隐式值:breeze.linalg.split.Impl2 [org.apache.spark.sql.Column,String,VR] val df2 = df.withColumn(“ nested”,split(col(“ Wrap Time”),“。”))
错误:(26,43)没有足够的参数可用于方法:(隐式暗示:breeze.linalg.split.Impl2 [org.apache.spark.sql.Column,String,VR])VR在特征UFunc中。 未指定的值参数隐含。 val df2 = df.withColumn(“ nested”,split(col(“ Wrap Time”),“。”))
代码:2:
val df2= df.
withColumn("nested", split($"Wrap Time", ".")).select($"nested"(0) as "Call Completion Code_1", $"nested"(1) as "Call Completion Code_2")
错误:(23,33)找不到参数impl的隐式值:breeze.linalg.split.Impl2 [org.apache.spark.sql.ColumnName,String,VR] withColumn(“ nested”,split($“ Wrap Time”,“。”))。select($“ nested”(0)作为“ Call Completion Code_1”,$“ nested”(1)作为“ Call Completion Code_2”)
错误:(23,33)没有足够的参数可用于方法:(隐式暗示:breeze.linalg.split.Impl2 [org.apache.spark.sql.ColumnName,String,VR])VR在特征UFunc中。 未指定的值参数隐含。 withColumn(“ nested”,split($“ Wrap Time”,“。”))。select($“ nested”(0)作为“ Call Completion Code_1”,$“ nested”(1)作为“ Call Completion Code_2”)
火花版本为:spark-2.3.2
斯卡拉2.11.8
jdk1.8.0_20
sbt-1.2.7
答案 0 :(得分:0)
能否请您尝试以下代码。应该可以。
val df2 = df.withColumn(“ _ tmp”,split($“ WRAP”,“ \\。”)) 。选择( $“ _ tmp” .getItem(0).as(“ col1”), $“ _ tmp” .getItem(1).as(“ col2”) )
答案 1 :(得分:0)
我面临同样的问题。 Intellij建议微风,但微风中的拆分不起作用 请删除微风,只需导入此行。 SQL函数
import org.apache.spark.sql.functions.{udf, array, explode, col,split}