我在两天前就开始探索火花了。所以我对它很陌生。我的用例是访问我的 scala 代码中外部 jar 中存在的 java 函数,我正在用 spark-shell 编写该代码。但我认为我没有正确装载我的罐子。这是我正在做的
spark-shell --master local[2] --jars pathToJarsWithComma --conf="spark.driver.extraClassPath=pathToJarsWithColon" --conf="spark.executor.extraClassPath=pathToJarsWithColon"
这就是我发射火花壳的方式,所有必需的罐子都通过。每当我尝试调用 java 静态函数时,例如:
rdd1.collect.foreach(a=>MyClass.myfuncttion(a))
我收到错误为:
<console>:26: error: not found: value MyClass
我想知道我的理解是否正确。我们可以通过加载外部jar在Spark中使用java函数吗?如果是,那么我在这里做错了什么。请指导。
我们可以通过加载外部jar在Spark中加载java函数。我不确定您是否需要最后添加的confs来完成这项工作。对我来说,我尝试了以下内容来测试将罐子装入火花壳中。
./bin/spark-shell --master <spark url> --jars /home/SparkBench/Terasort/target/jars/guava-19.0-rc2.jar
之后在 shell 中,我尝试从 jar 中的类访问字段。
scala> import com.google.common.primitives.UnsignedBytes
import com.google.common.primitives.UnsignedBytes
scala> UnsignedBytes.MAX_POWER_OF_TWO
res0: Byte = -128
如您所见,我能够从外部 jar 访问字段。您还可以测试是否可以通过类中的简单字段访问该类。