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

简单安装PySpark也支持S3访问

舒浩邈
2023-03-14

我想从PySpark读取存储在S3上的Parket数据。

我从这里下载了spark:

http://www.apache.org/dist/spark/spark-2.1.0/spark-2.1.0-bin-hadoop2.7.tgz

并天真地将其安装到Python上

cd python
python setup.py install

这似乎功能正常,我可以导入pyspark,生成SparkContext等。。然而,当我阅读一些可公开访问的拼花地板数据时,我得到以下信息:

import pyspark
sc = pyspark.SparkContext('local[4]')
sql = pyspark.SQLContext(sc)
df = sql.read.parquet('s3://bucket-name/mydata.parquet')

我收到以下异常

Py4JJavaError: An error occurred while calling o55.parquet.
: java.io.IOException: No FileSystem for scheme: s3
    at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2660)
    at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2667)
    at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:94)
    at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2703)
    at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2685)
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:373)
    at org.apache.hadoop.fs.Path.getFileSystem(Path.java:295)
    at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$14.apply(DataSource.scala:372)
    at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$14.apply(DataSource.scala:370)
    at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:241)
    at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:241)
    at scala.collection.immutable.List.foreach(List.scala:381)
    at scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:241)
    at scala.collection.immutable.List.flatMap(List.scala:344)
    at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:370)
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:152)
    at org.apache.spark.sql.DataFrameReader.parquet(DataFrameReader.scala:441)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244)
    at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)
    at py4j.Gateway.invoke(Gateway.java:280)
    at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)
    at py4j.commands.CallCommand.execute(CallCommand.java:79)
    at py4j.GatewayConnection.run(GatewayConnection.java:214)
    at java.lang.Thread.run(Thread.java:745)

这个错误从谷歌搜索中弹出一点。到目前为止,提供的任何解决方案都没有任何帮助。

我在个人电脑上安装了Linux(Ubuntu 16.04),没有安装其他东西(一切都很好)。

我降级为http://www.apache.org/dist/spark/spark-2.1.0/spark-2.1.0-bin-hadoop2.4.tgz默认情况下包含AWS。

现在不幸的是,我的AWS证书没有收到。我尝试了一些方法:

>

  • 将它们包含为SparkConf参数

    conf = (pyspark.SparkConf()
                   .set('fs.s3.awsAccessKeyId', ...')
                   .set('fs.s3.awsSecretAccessKey', '...'))
    sc = pyspark.SparkContext('local[4]', conf=conf)
    

    不幸的是,在所有情况下,我都会收到如下回溯

    IllegalArgumentException: 'AWS Access Key ID and Secret Access Key must be specified as the username or password (respectively) of a s3 URL, or by setting the fs.s3.awsAccessKeyId or fs.s3.awsSecretAccessKey properties (respectively).'
    
  • 共有1个答案

    松景铄
    2023-03-14

    使用预先构建的spark 2的Hadoop-2.4版本。X二进制文件(我相信它附带s3功能),您可以通过编程方式配置spark,以以下方式提取s3数据:

    import pyspark
    conf = pyspark.SparkConf()
    
    sc = pyspark.SparkContext('local[4]', conf=conf)
    sc._jsc.hadoopConfiguration().set("fs.s3n.awsAccessKeyId", "")
    sc._jsc.hadoopConfiguration().set("fs.s3n.awsSecretAccessKey", "")
    
    sql = pyspark.SQLContext(sc)
    df = sql.read.parquet('s3n://bucket-name/mydata.parquet')
    

    需要注意的一点是,bucket的URI和配置名称中都有前缀s3n

     类似资料:
    • 本文向大家介绍易语言支持库简单安装加载添加,包括了易语言支持库简单安装加载添加的使用技巧和注意事项,需要的朋友参考一下 1,首先,准备好欲安装的易语言支持库文件(fne、fnr或lib为后缀名等文件) 2,接下来,有必要对易语言支持库的文件做重要讲解。要安装支持库之前,先要弄明白易语言安装目录下的两个文件夹:lib和static_lib。lib文件夹内存放的以.fne或.fnr等后缀名的支持库文件

    • 您需要简单的安装,来让扩展包在您的项目中生效。该扩展包是基于 CatLib 核心库 研发的,所以在您的项目中必须安装有CatLib核心库。 如果您使用的是 CatLib For Unity 的引导库,请按照下面进行操作,否则根据自己的引导环境进行操作。 安装服务提供者 注册服务提供者到您的服务提供者列表。 Demo/Runtime/Config/Providers.cs new ProviderI

    • 我想知道PySpark是否支持使用IAM角色进行S3访问。具体来说,我有一个业务限制,我必须承担AWS角色才能访问给定的存储桶。使用boto时可以这样做(因为它是API的一部分),但我无法找到关于PySpark是否支持开箱即用的明确答案。 理想情况下,我希望能够在本地以独立模式运行时扮演一个角色,并将我的SparkContext指向该s3路径。我发现非IAM呼叫通常会随之而来: 是否存在提供IAM

    • 我按照http://developer.android.com/tools/support-library/setup.html的指示将支持库添加到我的android项目中,但遇到了这样的构建错误 Gradle:评估项目时出现问题:“projectname”。 没有方法的签名:org。格拉德尔。应用程序编程接口。内部的人工制品dsl。依赖项。DefaultDependencyHandler。com

    • 我正在尝试安装使用Intel x86模拟器加速器的快速Android模拟器。我已经通过SDK管理器下载了加速器,但当我试图安装它时,在安装开始时收到了以下错误消息: 我知道我的CPU(i7-3520M)支持VT-X虚拟化,所以我转到BIOS以确保它已启用: 如您所见,该功能在BIOS中启用。我在internet上找到了“Securable.exe”实用工具,当我启动它时,将显示以下窗口: 原来当你

    • 变量命名 在《初识永远强大的函数》一文中,有一节专门讨论“取名字的学问”,就是有关变量名称的问题,本着温故而知新的原则,这里要复习: 名称格式:(下划线或者字母)+(任意数目的字母,数字或下划线) 注意: 区分大小写 禁止使用保留字 遵循通常习惯 以单一下划线开头的变量名(_X)不会被from module import *语句导入的。 前后有下划线的变量名(X)是系统定义的变量名,对解释器有特殊