在 Jupyter 中使用 spark_csv 并使用 Python

数据挖掘 Python 阿帕奇火花 pyspark 朱庇特
2022-02-13 09:19:46

我的最终目标是使用 Jupyter 和 Python 一起使用 Spark 进行数据分析。我目前面临的障碍是加载外部spark_csv库。我使用 Mac OS 和 Anaconda 作为 Python 发行版。

特别是以下内容:

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

当从 Jupyter 调用时产生:

Py4JJavaError: An error occurred while calling o22.load.
: java.lang.ClassNotFoundException: Failed to find data source: com.databricks.spark.csv. Please find packages at http://spark-packages.org

以下是更多详细信息:

与 Jupyter 一起设置 Spark

我设法在 Jupyter/IPython(使用 Python 3.x)中设置了 Spark/PySpark。

系统初始设定

在我的 OS XI 上使用 Anaconda 安装了 Python。我目前安装的默认 Python 版本是 3.4.4(Anaconda 2.4.0)。请注意,我还使用conda create -n python2 python=2.7.

安装 Spark

这实际上是最简单的一步;将最新的二进制文件下载到~/Applications您选择的其他目录中。接下来,解压缩存档tar -xzf spark-X.Y.Z-bin-hadoopX.Y.tgz为了轻松访问 Spark,请创建一个指向 Spark 的符号链接:

ln -s ~/Applications/spark-X.Y.Z-bin-hadoopX.Y ~/Applications/spark

最后,将 Spark 符号链接添加到 PATH:

export SPARK_HOME=~/Applications/spark
export PATH=$SPARK_HOME/bin:$PATH

您现在可以在本地运行 Spark/PySpark:只需调用spark-shellpyspark.

设置 Jupyter

为了在 Jupyter 笔记本中使用 Spark,请将以下内容准备好PYTHONPATH

export PYTHONPATH=$SPARKHOME/python/lib/py4j-0.8.2.1-src.zip:$SPARKHOME/python/:$PYTHONPATH

更多细节可以在这里找到。

2个回答

假设您的其余配置是正确的,您所要做的就是使spark-csvjar 可用于您的程序。有几种方法可以实现这一目标:

  • 手动下载所需的 jars,包括 spark-csv和 csv 解析器(例如org.apache.commons.commons-csv)并将它们放在CLASSPATH.

  • 使用--packages选项(使用已用于构建 Spark 的 Scala 版本。预构建版本使用 2.10):

    • 使用PYSPARK_SUBMIT_ARGS环境变量:

      export PACKAGES="com.databricks:spark-csv_2.11:1.3.0"
      export PYSPARK_SUBMIT_ARGS="--packages ${PACKAGES} pyspark-shell"
      
    • 将 Gradle 字符串添加到spark.jars.packagesin conf/spark-defaults.conf

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

在您的 Mac 上使用以下程序 -

  1. vi 到 ~/.bash_profile (如果你在那列火车上,则 ~/.zshrc)
  2. 粘贴以下条目(请务必指定您想要的 spark-csv 版本)--

export PYSPARK_SUBMIT_ARGS="--packages com.databricks:spark-csv_2.11:1.3.0 $PYSPARK_SUBMIT_ARGS"

从那里,运行“ipython notebook”并用类似这样的东西进行测试——

import pyspark as ps
from pyspark.sql import SQLContext

sc = ps.SparkContext()

input_csv = 'file:////PATH_TO_CSV_ON_LOCAL_FILESYSTEM'

df=sqlContext.read.load(input_csv,format='com.databricks.spark.csv', header='true', inferSchema='true')

df.dtypes  # Returns the csv's schema breakdown with types