如何从 pyspark 中的本地 jar 导入包?

Posted

技术标签:

【中文标题】如何从 pyspark 中的本地 jar 导入包?【英文标题】:How to import a packge from a local jar in pyspark? 【发布时间】:2017-08-03 20:52:57 【问题描述】:

我正在使用 pyspark 对 csv 文件做一些工作,因此我需要从从 https://repo1.maven.org/maven2/com/databricks/spark-csv_2.11/1.4.0/spark-csv_2.11-1.4.0.jar 下载的 spark-csv_2.10-1.4.0.jar 导入包

由于代理问题,我将 jar 下载到本地。

谁能告诉我引用本地 jar 的正确用法是什么:

这是我使用的代码:

pyspark --jars /home/rx52019/data/spark-csv_2.10-1.4.0.jar 

它将按预期将我带到 pyspark shell,但是,当我运行时:

df = sqlContext.read.format('com.databricks.spark.csv').options(header='true',inferschema='true').load('hdfs://dev-icg/user/spark/routes.dat')

route.dat 已在 hdfs://dev-icg/user/spark/routes.dat 上传到 hdfs

它给了我错误:

:java.lang.NoClassDefFoundErrororg/apache/commons/csv/CSVFormat

如果我跑:

df = sqlContext.read.format('com.databricks.spark.csv').options(header='true',inferschema='true').load('routes.dat')

我收到此错误:

py4j.protocol.Py4JJavaError:调用 o72.load 时出错。 : java.lang.NoClassDefFoundError: 无法初始化类 com.databricks.spark.csv.package$

谁能帮我解决一下?非常感谢你。任何线索表示赞赏。

【问题讨论】:

【参考方案1】:

执行此操作的正确方法是添加选项(例如,如果您正在启动 spark shell)

spark-shell --packages com.databricks:spark-csv_2.11:1.4.0 --driver-class-path /path/to/csvfilejar.jar

我没有直接使用 databricks csvjar,但我使用 netezza 连接器在他们提到使用此选项的地方触发

https://github.com/SparkTC/spark-netezza

【讨论】:

谢谢。我的工作文件夹是/home/rr52019/data,jar文件在工作文件夹里,我用的是pyspark,命令如下:pyspark --packages com.databricks:spark-csv_2.11:1.4.0 --driver -class-path /spark-csv_2.10-1.4.0.jar 并提示错误:线程“main”中的异常 java.lang.RuntimeException:[未解决的依赖项:com.databricks#spark-csv_2.11;1.4.0 : 未找到]

以上是关于如何从 pyspark 中的本地 jar 导入包?的主要内容,如果未能解决你的问题,请参考以下文章

如何利用maven向本地仓库导入官网没有的jar包

如何批量更新本地仓库中的jar包

如何把本地maven仓库里的jar包

用命令将本地jar包导入到本地maven仓库

用命令将本地jar包导入到本地maven仓库

用命令将本地jar包导入到本地maven仓库