首页 > 解决方案 > 将 1 列拆分为多列时显示编译错误

问题描述

在使用下面的代码将我在 dataFrame 中的一列拆分为 2 列时,我尝试了两种类型的代码,但是在运行程序时出现错误。在 IteliJ 屏幕中它没有显示错误(意味着没有红色标记)但是在运行时它在控制台上显示错误。我的数据框是:+---------+ |Wrap Time| +---------+ | 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("换行时间"), "."))

错误:(26, 43) 方法应用的参数不足:(隐式 impl:breeze.linalg.split.Impl2[org.apache.spark.sql.Column,String,VR])VR 特性 UFunc。未指定值参数 impl。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) 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])VR 特性 UFunc。未指定值参数 impl。withColumn("nested", split($"Wrap Time", ".")).select($"nested"(0) as "Call Completion Code_1", $"nested"(1) as "Call Completion Code_2")

spark版本为:spark-2.3.2
scala 2.11.8
jdk1.8.0_20 sbt-1.2.7

标签: scalaapache-sparkdataframe

解决方案


你能试试下面的代码吗?它应该工作。

val df2=df.withColumn("_tmp", split($"WRAP", "\\.")) .select( $"_tmp".getItem(0).as("col1"), $"_tmp". getItem(1).as("col2") )


推荐阅读