将1列拆分为多列时显示编译错误

时间:2019-01-02 12:47:50

标签: scala apache-spark dataframe

使用下面的代码将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

2 个答案:

答案 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}