Apache spark map操作中使用变量的火花错误

Apache spark map操作中使用变量的火花错误,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,我试图迭代一个数据帧,并对其行应用映射操作 import spark.implicits._ import org.apache.spark.sql.Row case class SomeData(name:String, value: Int) val input = Seq(SomeData("a",2), SomeData("b", 3)).toDF val SOME_STRING = "some_string" input.map(row => SOME_STRING )

我试图迭代一个数据帧,并对其行应用映射操作

import spark.implicits._
import org.apache.spark.sql.Row
case class SomeData(name:String, value: Int)

val input = Seq(SomeData("a",2), SomeData("b", 3)).toDF

val SOME_STRING = "some_string"

input.map(row =>
  SOME_STRING
).show
上述代码失败,出现以下异常:

ERROR TaskSetManager: Task 0 in stage 4.0 failed 4 times; aborting job
org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 4.0 failed 4 times, most recent failure: Lost task 0.3 in stage 4.0 (TID 14, ip-xxxx, executor 4): java.lang.NoClassDefFoundError: L$iw;
        at java.lang.Class.getDeclaredFields0(Native Method)
        at java.lang.Class.privateGetDeclaredFields(Class.java:2583)
        at java.lang.Class.getDeclaredField(Class.java:2068)
但是,如果将变量替换为字符串,代码将正常工作

input.map(row =>
  "some_string"
).show

+-----------+
|      value|
+-----------+
|some_string|
|some_string|
+-----------+

上面的代码有什么问题吗?是否可以在映射操作中使用变量和函数调用。

这很正常,您的变量在驱动程序中定义,然后在工作程序中使用,因此您的工作程序不知道该变量

您可以做的是:

input.map(row =>
   val SOME_STRING = "some_string"
).show

您还可以检查广播变量:

在驱动程序中,我想您的意思是说。我想他指的是一个传递的参数,即使你是正确的。