当前位置: 首页 > 面试题库 >

pyspark:带有spark提交的jars依赖

马权
2023-03-14
问题内容

我编写了一个pyspark脚本,该脚本读取两个json文件,coGroup然后将它们发送到elasticsearch集群。当我在本地运行该elasticsearch- hadoop文件时,一切都会正常运行(大部分情况下),我下载了org.elasticsearch.hadoop.mr.EsOutputFormatorg.elasticsearch.hadoop.mr.LinkedMapWritable类的jar文件,然后使用pyspark使用--jars参数运行我的工作,并且可以看到在我的Elasticsearch集群中出现的文档。

但是,当我尝试在Spark群集上运行它时,出现此错误:

Traceback (most recent call last):
  File "/root/spark/spark_test.py", line 141, in <module>
    conf=es_write_conf
  File "/root/spark/python/pyspark/rdd.py", line 1302, in saveAsNewAPIHadoopFile
    keyConverter, valueConverter, jconf)
  File "/root/spark/python/lib/py4j-0.8.2.1-src.zip/py4j/java_gateway.py", line 538, in __call__
  File "/root/spark/python/lib/py4j-0.8.2.1-src.zip/py4j/protocol.py", line 300, in get_return_value
py4j.protocol.Py4JJavaError: An error occurred while calling z:org.apache.spark.api.python.PythonRDD.saveAsNewAPIHadoopFile.
: java.lang.ClassNotFoundException: org.elasticsearch.hadoop.mr.LinkedMapWritable
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:274)
    at org.apache.spark.util.Utils$.classForName(Utils.scala:157)
    at org.apache.spark.api.python.PythonRDD$$anonfun$getKeyValueTypes$1$$anonfun$apply$9.apply(PythonRDD.scala:611)
    at org.apache.spark.api.python.PythonRDD$$anonfun$getKeyValueTypes$1$$anonfun$apply$9.apply(PythonRDD.scala:610)
    at scala.Option.map(Option.scala:145)
    at org.apache.spark.api.python.PythonRDD$$anonfun$getKeyValueTypes$1.apply(PythonRDD.scala:610)
    at org.apache.spark.api.python.PythonRDD$$anonfun$getKeyValueTypes$1.apply(PythonRDD.scala:609)
    at scala.Option.flatMap(Option.scala:170)
    at org.apache.spark.api.python.PythonRDD$.getKeyValueTypes(PythonRDD.scala:609)
    at org.apache.spark.api.python.PythonRDD$.saveAsNewAPIHadoopFile(PythonRDD.scala:701)
    at org.apache.spark.api.python.PythonRDD.saveAsNewAPIHadoopFile(PythonRDD.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:231)
    at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:379)
    at py4j.Gateway.invoke(Gateway.java:259)
    at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:133)
    at py4j.commands.CallCommand.execute(CallCommand.java:79)
    at py4j.GatewayConnection.run(GatewayConnection.java:207)
    at java.lang.Thread.run(Thread.java:745)

在我看来,这很清楚:elasticsearch- hadoop工人无法使用广口瓶;问题是:如何将其与应用程序一起发送?我可以将其sc.addPyFile用于python依赖项,但不能与jars一起使用,并且使用--jars参数spark- submit也无济于事。


问题答案:

--jars刚刚作品; 问题是我一开始如何spark-submit工作;正确的执行方式是:

./bin/spark-submit <options> scriptname

因此,--jars必须将选项放在脚本之前:

./bin/spark-submit --jars /path/to/my.jar myscript.py

如果您认为这是将参数传递给脚本本身的唯一方法,那么这很明显,因为脚本名称后面的所有内容都将用作脚本的输入参数:

./bin/spark-submit --jars /path/to/my.jar myscript.py --do-magic=true


 类似资料:
  • 问题内容: 但是有很多歧义和提供的一些答案…包括在jars / executor / driver配置或选项中复制jar引用。 How ClassPath is affected Driver Executor (for tasks running) Both not at all Separation character: comma, colon, semicolon If provided

  • 我的数据集大小为10GB(例如Test.txt)。 我编写了pyspark脚本,如下所示(Test.py): 然后我使用下面的命令执行上面的脚本: 然后我得到如下错误: 请让我知道如何解决这个问题?

  • 我创建了一个使用jackson 2.7.5的优步jar。我使用的是spark 1.6.2(因为我使用的是scala-2.10)。然而,每当我尝试提交我的spark作业时,我都会遇到错误,即在更新的jackson版本的功能开关上找不到任何方法。 我会假设一个uber-jar会允许我捆绑我自己的依赖项,即使它们与使用某种委托类加载器来隔离冲突需要运行的火花相冲突。不是这样吗?如果不是,我该如何解决这个

  • 问题内容: 因此,从pyspark运行时,我会输入(不指定任何上下文): ..而且效果很好。 但是,当我从运行脚本时,例如 我把以下内容 但这给我一个错误 pyspark.sql.utils.AnalysisException:u’未找到表:experian_int_openings_latest_orc;’ 所以它没有看到我的桌子。 我究竟做错了什么?请帮忙 PS Spark版本在Amazon

  • 我一直在尝试用py函数在pyspark中实现udf,如下所示: 它采用了我之前训练过的bin模型。 input_text列包含普通文本,df是包含整个数据的数据框。 我在哪里得到以下错误: ​ Fasttext当前正在运行,python函数在同一个笔记本上运行没有任何问题。 谢谢你的帮助,

  • 我正在为Spark Streaming作业构建指标系统,在系统中,指标收集在每个执行程序中,因此需要在每个执行程序中初始化指标源(用于收集指标的类)。 度量源被打包在一个jar中,当提交作业时,jar使用参数'--jars'从本地发送到每个执行器,但是,执行器在jar到达之前开始初始化度量源类,因此,它会抛出类未找到异常。 似乎如果执行者可以等到所有资源都准备好,问题就会得到解决,但我真的不知道该