【问题标题】:spark-shell - Not able to access java functions in jarsspark-shell - 无法访问 jar 中的 java 函数
【发布时间】:2019-08-15 09:06:19
【问题描述】:

两天前我已经开始探索 spark 了。所以我对它很陌生。我的用例是在我用 spark-shell 编写的 scala 代码中访问外部 jar 中存在的 java 函数。但我认为我没有正确加载我的罐子。这就是我正在做的事情

spark-shell --master local[2] --jars pathToJarsWithComma --conf="spark.driver.extraClassPath=pathToJarsWithColon" --conf="spark.executor.extraClassPath=pathToJarsWithColon"

这就是我启动 spark-shell 并传递所有必需的 jar 的方式。每当我尝试调用 java 静态函数时:

rdd1.collect.foreach(a=>MyClass.myfuncttion(a))

我收到错误:

<console>:26: error: not found: value MyClass

我想知道我的理解是否正确。我们可以通过加载外部 jar 在 spark 中使用 java 函数吗?如果是,那么我在这里做错了什么。请指导。

【问题讨论】:

  • 你导入了吗?您需要先使用import my.package.MyClass 导入类(my.package 当然是示例)。
  • 您确定您传递的 jar 包含您所指的类吗?
  • 是的,我的 jar 中有这个类。我确实像这样导入了包:import my.package._ 希望这个包下的所有类都将被加载。但我遇到了与我提到的相同的错误。

标签: java scala apache-spark jar spark-shell


【解决方案1】:

我们可以通过加载外部 jars 在 Spark 中加载 java 函数。我不确定您是否需要最后添加的 conf 来完成这项工作。对我来说,我尝试了以下方法来测试在 spark shell 中加载 jar。

./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 访问字段。您还可以测试您是否可以通过一个简单的字段访问该类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-15
    • 1970-01-01
    • 2017-03-08
    • 2019-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    相关资源
    最近更新 更多