使用 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 环境。
总体而言,此命令将:
- 在后台启动名为"notebook"的分离式 Docker 容器。
- 使用
jupyter/all-spark-notebook:spark-3.5.0
镜像,该镜像提供了一个带有 Apache Spark 的 Jupyter Notebook 环境。 - 将您的本地目录
/Users/datasciencefm/workspace/sparkdata
挂载到容器内的/sparkdata
目录以进行数据共享。 - 将容器的所有公开端口发布到您的主机上的随机端口,允许您通过 Web 浏览器访问 Jupyter Notebook 界面。
要访问 Jupyter Notebook 界面:
-
找到 Docker 为容器映射的端口。您可以通过运行以下命令执行此操作:
docker port notebook
这将输出类似以下内容:
8888:8888
在此示例中,您的主机上的端口 8888 映射到容器内的端口 8888。
-
打开 Web 浏览器并导航到以下 URL,将
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