在 Google Colab 中使用 pyspark

Vic*_*gis 8 python pyspark google-colaboratory

这是我在使用大量 StackOverflow 后的第一个问题,所以如果我提供不准确或不完整的信息,请纠正我

直到本周,我才按照我在互联网上找到的众多指南之一设置了一个 colab 笔记本,可以与 pyspark 一起运行,但本周它开始出现一些不同的错误。

使用的代码几乎是这样的:

!apt-get install openjdk-8-jdk-headless -qq > /dev/null
!wget -q https://downloads.apache.org/spark/spark-3.0.0-preview2/spark-3.0.0-preview2-bin-hadoop2.7.tgz
!tar -xvf spark-3.0.0-preview2-bin-hadoop2.7.tgz
!pip install -q findspark
import os
os.environ["JAVA_HOME"] = "/usr/lib/jvm/java-8-openjdk-amd64"
os.environ["SPARK_HOME"] = "/content/spark-3.0.0-preview2-bin-hadoop2.7"
import findspark
findspark.init()
Run Code Online (Sandbox Code Playgroud)

我尝试将 Java 版本从 8 更改为 11,并使用https://downloads.apache.org/spark/上所有可用的 Spark 构建并相应地更改 HOME 路径。我pip freeze在一个指南中使用过来检查 colab 中使用的 Spark 版本,它说 pyspark 3.0.0 所以我尝试了 3.0.0 版上的所有版本,但我一直得到的是错误:

Exception: Unable to find py4j, your SPARK_HOME may not be configured correctly
Run Code Online (Sandbox Code Playgroud)

我不太了解为此使用 Java 的必要性,但我也尝试安装 pyj4,但!pip install py4j它说我安装时已经安装了,我尝试了互联网上的所有不同指南,但我无法运行我的 Spark代码了。有谁知道如何解决这一问题?我只将 colab 用于大学用途,因为我的电脑已经过时了,我对此知之甚少,但我确实需要让这款笔记本可靠地运行,所以我怎么知道是时候更新导入的版本了?

pon*_*dto 7

按照这个对我有用的colab笔记本

第一个单元格:

!pip install pyspark
!pip install -U -q PyDrive
!apt install openjdk-8-jdk-headless -qq
import os
os.environ["JAVA_HOME"] = "/usr/lib/jvm/java-8-openjdk-amd64"
Run Code Online (Sandbox Code Playgroud)

这几乎安装pyspark

但是请按照以下步骤启动 Spark UI,这对于理解物理计划、存储使用等非常有帮助。另外:它有漂亮的图表;)

第二个单元格:

from pyspark import SparkSession
from pyspark import SparkContext, SparkConf



# create the session
conf = SparkConf().set("spark.ui.port", "4050")

# create the context
sc = pyspark.SparkContext(conf=conf)
spark = SparkSession.builder.getOrCreate()
Run Code Online (Sandbox Code Playgroud)

第三个单元格:

!wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
!unzip ngrok-stable-linux-amd64.zip
get_ipython().system_raw('./ngrok http 4050 &')
!sleep 10
!curl -s http://localhost:4040/api/tunnels | python3 -c \
    "import sys, json; print(json.load(sys.stdin)['tunnels'][0]['public_url'])"
Run Code Online (Sandbox Code Playgroud)

之后,您将看到一个 URL,您可以在其中找到 Spark UI;我的示例输出是:

--2020-10-03 11:30:58--  https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
Resolving bin.equinox.io (bin.equinox.io)... 52.203.78.32, 52.73.16.193, 34.205.238.171, ...
Connecting to bin.equinox.io (bin.equinox.io)|52.203.78.32|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 13773305 (13M) [application/octet-stream]
Saving to: ‘ngrok-stable-linux-amd64.zip.1’

ngrok-stable-linux- 100%[===================>]  13.13M  13.9MB/s    in 0.9s    

2020-10-03 11:31:00 (13.9 MB/s) - ‘ngrok-stable-linux-amd64.zip.1’ saved [13773305/13773305]

Archive:  ngrok-stable-linux-amd64.zip
replace ngrok? [y]es, [n]o, [A]ll, [N]one, [r]ename: y
  inflating: ngrok                   
http://989c77d52223.ngrok.io
Run Code Online (Sandbox Code Playgroud)

最后一个元素http://989c77d52223.ngrok.io是我的 Spark UI 所在的地方。


小智 0

@Victor我也有类似的问题。这就是我所做的。

  1. 将现有的 jupyter 笔记本从 colab 下载到您的计算机驱动器。

  2. 在colab中创建一个新笔记本

  3. 执行以下

    !pip3 安装 pyspark

  4. 将您的笔记本上传到同一个 Colab 会话。

  5. 运行 Spark 会话并检查