当前位置: 首页 > 知识库问答 >
问题:

在Google Colab中使用pyspark

彭烨熠
2023-03-14

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

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

使用的代码大致如下:

!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()

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

Exception: Unable to find py4j, your SPARK_HOME may not be configured correctly

我不太了解使用Java来实现这一点的必要性,但我也尝试过安装pyj4,尽管如此!pip安装py4j,它说我安装的时候已经安装了,我在互联网上尝试了各种不同的指南,但我不能再运行我的Spark代码了。有人知道如何解决这个问题吗?我只在大学使用colab,因为我的电脑已经过时了,我对它了解不多,但我真的需要让这个笔记本可靠地运行,所以我怎么知道是时候更新导入的版本了?

共有3个答案

年高洁
2023-03-14

Spark版本在google colab中运行良好。请按照我的步骤操作:

!pip install pyspark==2.3.2
import pyspark 

检查已安装的版本

pyspark.__version__

尝试创建Sparksession

from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("Sparkify").getOrCreate()

您现在可以在colab中使用Spark。享受吧!

孟均
2023-03-14

@维克多一世也有类似的问题。这就是我所做的。

>

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

    在colab中创建一个新笔记本

    执行以下操作

    !pip3安装pyspark

    将您的笔记本上传到同一个colab会话。

    运行Spark会话并检查

  • 逑阳泽
    2023-03-14

    以下是我的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"
    

    这几乎安装了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()
    

    第三个单元格:

    !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'])"
    

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

    --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
    

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

     类似资料:
    • 我一直试图获得一个简单的web操作来向API发出一个经过身份验证的get请求(我已经从示例代码中删除了实际的url和秘密)。 我已经在本地成功地运行了这一点,但是当我测试web动作时,它只是在记录“调用Axios”之后死亡。 它不会报告错误,我尝试实现一个承诺,认为线程在api响应之前就结束了,但没有效果。有什么线索吗?

    • 问题内容: 我想使用Android Studio使用Gradle构建工具开发应用程序。我无法在上插入存储库和库。我的文件如下: 如何在项目中添加OpenCV? 问题答案: 您可以在Android Studio中轻松完成此操作。 请按照以下步骤将Open CV作为库添加到您的项目中。 libraries在项目主目录下创建一个文件夹。例如,如果您的项目是OpenCVExamples,则将创建一个Ope

    • 我想使用Android Studio开发一个应用程序使用Gradle构建工具。我无法在上插入OpenCV repo和库。我的文件如下所示: 我如何在我的项目中添加OpenCV?

    • 问题内容: 我有一个简单的Entitly类,(和单独类中的字段)。然后,我使用Spring Data()访问数据库(MySql),使用常规ID,查询可以正常工作,无论是Spring生成的查询还是我自己编写的查询。与我没有设法创建正确的查询。我想做的是选择所有id(发生某些情况的EmbeddedId字段之一),这里有一些代码示例,也许有人会知道如何解决它。 实体类: EmbeddedId类: 和存储

    • 问题内容: 我正在研究控制建筑物的光和热的项目。后端(用Java编写)将在Mac Mini上运行,并且应该可以通过SOAP进行访问。 我希望将此项目的复杂性降至最低,因为我不希望每个使用它的人都必须设置应用程序服务器。所以到目前为止,我一直使用javax.xml.ws.Endpoint: 这样的效果出奇的好(嘿,您什么时候最后一次只用3行代码看到Java中的东西?),但是现在我正在寻找一种使用HT

    • 问题内容: 我想使用系统蜂鸣器(并且只有在没有蜂鸣器/无法访问蜂鸣器时才使用扬声器)生成具有特定频率和长度(针对不同的声音信号)的蜂鸣声。我知道可以通过使用ioctl来做到这一点,但这需要root访问权限,而这是我所不希望的。 我知道我可以只使用“ beep”命令,但这将是一个依赖关系,如果可能的话,不应使用它(根本没有外部依赖关系,只有基本的linux库和C)。 我目前拥有的是以下代码(但这需要