使用 Docker 设置 PySpark Notebook

时间:2024-03-09 16:52:08

使用 Docker 设置 PySpark Notebook

第 1 步:拉取 Docker 镜像

首先拉取jupyter/all-spark-notebook包含 Spark 3.5.0 的镜像。

docker pull jupyter/all-spark-notebook:spark-3.5.0

第 2 步:设置您的工作区

在运行 Docker 映像之前,我们需要设置一个用于存储 Spark 数据的目录。

创建一个sparkdata在您的工作空间中命名的目录。请记住,您需要在下一步中调整路径以匹配您的系统设置。在此目录中您可以存储任何 CSV 文件。

我们从https://www.kaggle.com/datasets/lava18/google-play-store-apps中下载 CSV 文件(为了方便起见,在下面共享)。Googleplay 商店用户评论googleplaystore_user_reviews.csv

7MBhttps://cdn.getmidnight.com/171293841d3fdd4af2e12426ce202ac9/files/2023/09/googleplaystore_user_reviews.csv?ref=datascience.fm
第 3 步:运行 Docker 镜像

现在,让我们运行 Docker 映像并将sparkdata目录映射到容器。

替换/Users/datasciencefm/workspace/sparkdata为您的目录的路径sparkdata

docker run -d -P --name notebook -v /Users/datasciencefm/workspace/sparkdata:/sparkdata  jupyter/all-spark-notebook:spark-3.5.0

好的,以下是您提供的命令的中文解释:

docker run: 此命令用于运行 Docker 镜像。

-d: 此标志指示 Docker 在分离模式下运行容器,这意味着它将在后台运行,您不会在终端中看到其输出。

-P: 此标志指示 Docker 将容器的所有公开端口发布到主机上的随机端口。这允许您从 Web 浏览器访问 Jupyter Notebook 界面。

--name notebook: 此选项为容器分配名称“notebook”。这对于稍后管理和引用容器很有用。

-v /Users/datasciencefm/workspace/sparkdata:/sparkdata: 此选项将主机上的本地目录 /Users/datasciencefm/workspace/sparkdata 挂载到容器内的 /sparkdata 目录。这允许您在主机和容器之间共享数据。

jupyter/all-spark-notebook:spark-3.5.0: 这指定要使用的 Docker 镜像。在此情况下,镜像是 jupyter/all-spark-notebook,标签为 spark-3.5.0。该镜像提供了一个预安装了 Apache Spark 3.5.0 版本的 Jupyter Notebook 环境。

总体而言,此命令将:

  1. 在后台启动名为“notebook”的分离式 Docker 容器。
  2. 使用 jupyter/all-spark-notebook:spark-3.5.0 镜像,该镜像提供了一个带有 Apache Spark 的 Jupyter Notebook 环境。
  3. 将您的本地目录 /Users/datasciencefm/workspace/sparkdata 挂载到容器内的 /sparkdata 目录以进行数据共享。
  4. 将容器的所有公开端口发布到您的主机上的随机端口,允许您通过 Web 浏览器访问 Jupyter Notebook 界面。

要访问 Jupyter Notebook 界面:

  1. 找到 Docker 为容器映射的端口。您可以通过运行以下命令执行此操作:
docker port notebook

这将输出类似以下内容:

8888:8888

在此示例中,您的主机上的端口 8888 映射到容器内的端口 8888。

  1. 打开 Web 浏览器并导航到以下 URL,将 8888 替换为您在上一步骤中获得的实际端口号:
http://localhost:8888
步骤 4:检索端口映射

要访问 Jupyter Notebook,我们需要知道哪个主机端口已映射到容器的 port 8888。执行以下命令:

docker port notebook 8888

对于我们来说,输出是0.0.0.0:55002.

第 5 步:获取笔记本令牌

出于安全原因,Jupyter Notebook 受令牌保护。让我们获取这个令牌:

docker logs --tail 3 notebook

您的输出应类似于以下 URL:http://127.0.0.1:8888/lab?token=YOUR_TOKEN_HERE

第 6 步:访问 Jupyter Notebook

将 URL 中的默认端口替换为您在步骤 4 中标识的端口。在我们的示例中,更新后的 URL 为:

http://127.0.0.1:55002/lab?token=82f8bf90a86103ca2e029241df7a59200c1aff788e1c2fbb

只需将此 URL 粘贴到浏览器中即可打开 Jupyter Notebook。

第 7 步:深入了解 PySpark!

现在,是时候开始使用 PySpark 了。启动一个新的Python笔记本并输入以下代码:

from pyspark.sql import SparkSession

# Spark session & context
spark = SparkSession.builder.master("local").getOrCreate()
sc = spark.sparkContext

# Reading CSV file from /sparkdata folder
csv_path = "/sparkdata/googleplaystore_user_reviews.csv"  # This will read any CSV file in the /sparkdata folder
df = spark.read.csv(csv_path, header=True, inferSchema=True)  # Assuming the CSV has a header

# Show the DataFrame
df.show()

# If you want to perform any action on DataFrame
# For instance, to get the count of rows:
print("Number of rows:", df.count())

这将初始化 Spark 会话,从目录中读取 CSV 文件/sparkdata,并显示其内容。

也可以用下面命令,不过退出命令窗口后,容器讲被删除。

docker run -it --rm  -v D:\spdata:/home/jovyan/work -p 8888:8888 jupyter/all-spark-notebook