如何在 Apache Spark 预构建版本中添加任何新库,如 spark-csv

Posted

技术标签:

【中文标题】如何在 Apache Spark 预构建版本中添加任何新库,如 spark-csv【英文标题】:How to add any new library like spark-csv in Apache Spark prebuilt version 【发布时间】:2015-06-10 13:13:47 【问题描述】:

我已经构建了Spark-csv,并且能够使用以下命令从 pyspark shell 中使用它

bin/spark-shell --packages com.databricks:spark-csv_2.10:1.0.3

获取错误

>>> df_cat.save("k.csv","com.databricks.spark.csv")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/abhishekchoudhary/bigdata/cdh5.2.0/spark-1.3.1/python/pyspark/sql/dataframe.py", line 209, in save
    self._jdf.save(source, jmode, joptions)
  File "/Users/abhishekchoudhary/bigdata/cdh5.2.0/spark-1.3.1/python/lib/py4j-0.8.2.1-src.zip/py4j/java_gateway.py", line 538, in __call__
  File "/Users/abhishekchoudhary/bigdata/cdh5.2.0/spark-1.3.1/python/lib/py4j-0.8.2.1-src.zip/py4j/protocol.py", line 300, in get_return_value
py4j.protocol.Py4JJavaError

我应该将 jar 文件放在我的 spark 预构建设置中的哪个位置,以便我也可以直接从 python 编辑器访问spark-csv

【问题讨论】:

【参考方案1】:

在我使用 spark-csv 的时候,我还必须下载 commons-csv jar(不确定它是否仍然相关)。两个 jar 在 spark 分发文件夹中的位置。

    我下载的罐子如下:

    wget http://search.maven.org/remotecontent?filepath=org/apache/commons/commons-csv/1.1/commons-csv-1.1.jar -O commons-csv-1.1.jar<br/>    
    wget http://search.maven.org/remotecontent?filepath=com/databricks/spark-csv_2.10/1.0.0/spark-csv_2.10-1.0.0.jar -O spark-csv_2.10-1.0.0.jar
    

    然后使用参数启动 python spark shell:

    ./bin/pyspark --jars "spark-csv_2.10-1.0.0.jar,commons-csv-1.1.jar"
    

    并从 csv 文件中读取 spark 数据帧:

    from pyspark.sql import SQLContext
    sqlContext = SQLContext(sc)
    df = sqlContext.load(source="com.databricks.spark.csv", path = "/path/to/you/file.csv")
    df.show()
    

【讨论】:

您将这些罐子放在您的 spark 发行版中的什么位置?是 $SPARK_HOME/lib 吗?【参考方案2】:

另一种选择是将以下内容添加到您的 spark-defaults.conf 中:

spark.jars.packages com.databricks:spark-csv_2.11:1.2.0

【讨论】:

【参考方案3】:

不将 jar 放在任何特定文件夹中,一个简单的解决方法是使用以下参数启动 pyspark shell:

bin/pyspark --packages com.databricks:spark-csv_2.10:1.0.3

这将自动加载所需的 spark-csv jars。

然后执行以下操作来读取 csv 文件:

from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)
df = sqlContext.read.format('com.databricks.spark.csv').options(header='true').load('file.csv')
df.show()

【讨论】:

在创建 Spark 上下文之前,当我使用 SparkConf().set("key", "value") 从 IPython 设置配置参数时,我将如何修改您的答案?我没有看到“packages”键,并且将“spark.jars”设置为包含下载的 jar 的路径不起作用。 有没有办法做@dnlbrky 想要的? 如果 spark 上下文已经创建,你可能无法更改它的大部分参数。 SparkConf().set("spark.jars.packages","com.databricks:sparkcsv_2.10:1.0.3").. 我知道我来不及回复@dnlbrky @Jimmy - 谢谢。这对我有用,@ 987654324@。 @dnlbrky @保罗【参考方案4】:

假设会话/上下文尚未创建:

import os

os.environ['PYSPARK_SUBMIT_ARGS'] = '--packages com.databricks:spark-csv_2.10:1.3.0 pyspark-shell'

【讨论】:

如果我想添加多个包怎么办?我正在尝试--packages com.databricks:spark-avro_2.11:4.0.0 databricks:spark-deep-learning:1.1.0-spark2.3-s_2.11 pyspark-shell,但我得到了Java gateway process exited before sending its port number【参考方案5】:

以下命令帮助了我-:使用 Scala 2.10 版本

/opt/mapr/spark/spark-1.5.2/bin/spark-shell --master local[*] --packages com.databricks:spark-csv_2.10:1.4.0

具有以下依赖项-:

com.databricks#spark-csv_2.10;1.4.0!spark-csv_2.10.jar (2043ms)
org.apache.commons#commons-csv;1.1!commons-csv.jar (419ms)
com.univocity#univocity-parsers;1.5.1!univocity-parsers.jar (1481ms)

【讨论】:

【参考方案6】:

首先找出火花的路径。例如对于 pyspark

    which pyspark

它会像这样返回你的路径- /home/ubuntu/bin/pyspark

然后根据您的火花路径更改路径来运行此命令 general-: path --packages com.databricks:spark-csv_2.10:1.0.3

    /home/ubuntu/bin/pyspark --packages com.databricks:spark-csv_2.10:1.0.3

【讨论】:

以上是关于如何在 Apache Spark 预构建版本中添加任何新库,如 spark-csv的主要内容,如果未能解决你的问题,请参考以下文章

尝试在 Windows 上运行 Apache Spark 示例时出错

使用Spark

如何在 AOSP 源代码中添加预构建的应用程序(系统应用程序)

执行 spark-shell 时出现 NoClassDefFoundError com.apache.hadoop.fs.FSDataInputStream

Linux配置Spark

使用自定义 spark 版本启动 Oozie 作业