Apache spark Pyspark-spark submit--jars和sc.u jsc.addJar(';myjar.jar';)在行为上有什么区别`

Apache spark Pyspark-spark submit--jars和sc.u jsc.addJar(';myjar.jar';)在行为上有什么区别`,apache-spark,pyspark,Apache Spark,Pyspark,因此,我有一个PySpark程序,它可以通过以下命令正常运行: spark-submit --jars terajdbc4.jar,tdgssconfig.jar --master local sparkyness.py 是的,它在本地模式下运行,只在主节点上执行 我希望能够通过以下方式启动PySpark脚本: python sparkyness.py 因此,我在PySpark脚本中添加了以下代码行以便于实现: import findspark findspark.init() sco

因此,我有一个PySpark程序,它可以通过以下命令正常运行:

spark-submit --jars terajdbc4.jar,tdgssconfig.jar --master local sparkyness.py
是的,它在本地模式下运行,只在主节点上执行

我希望能够通过以下方式启动PySpark脚本:

python sparkyness.py
因此,我在PySpark脚本中添加了以下代码行以便于实现:

import findspark
findspark.init()



sconf.setMaster("local")



sc._jsc.addJar('/absolute/path/to/tdgssconfig.jar')
sc._jsc.addJar('/absolute/path/to/terajdbc4.jar')
但这似乎不起作用。每次我尝试使用
python sparkyness.py运行脚本时,都会出现以下错误:

py4j.protocol.Py4JJavaError: An error occurred while calling o48.jdbc.
: java.lang.ClassNotFoundException: com.teradata.jdbc.TeraDriver

spark submit--jars
sc.\u jsc.addJar('myjar.jar')
之间有什么区别?是什么导致了这个问题?构建SparkSession时,我需要做的不仅仅是
sc.\u jsc.addJar()

使用
spark.jars

spark = SparkSession.builder.appName('my_awesome')\
    .config('spark.jars', '/absolute/path/to/jar')\
    .getOrCreate()
相关的:

编辑:我不建议劫持_jsc,因为我认为这不会处理JAR到驱动程序和执行器的分发,也不会添加到类路径

示例:我在没有Hadoop AWS jar的情况下创建了一个新的SparkSession,然后尝试访问S3,下面是错误(与使用
sc添加时的错误相同)

Py4JJavaError:调用o35.parquet时出错: java.io.IOException:没有scheme:s3的文件系统

然后我用jar创建了一个会话,得到了一个新的预期错误:

Py4JJavaError:调用o390.parquet时出错: java.lang.IllegalArgumentException:AWS访问密钥ID和密码 必须将访问密钥指定为用户名或密码 (分别)的S3URL,或通过设置fs.s3.awsAccessKeyId或 fs.s3.awsSecretAccessKey属性(分别)


美好的我要试试这个!一般性问题。您是如何找到此选项的
spark.jars
?spark配置文档:-注意spark.jars和最简单/功能最强大的选项之一“spark.jars.packages”这使得您可以使用Maven坐标自动添加依赖项,这比编译带有dependenciesThanks书签链接的胖jar要好得多!是的,使用这种方式效果非常好。我没有使用
SparkSpession.builder
方法,所以我不得不使用
pyspark.SparkConf
.set()
方法,但我强烈建议使用SparkSession和Spark 2.x