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
您还可以检查广播变量:在驱动程序中,我想您的意思是说。我想他指的是一个传递的参数,即使你是正确的。