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

我应该如何在s3上使用Spark加载文件?

向修谨
2023-03-14

我通过pip install pyspark安装了spark

from pyspark.sql import SparkSession

spark = SparkSession.builder \
            .config('spark.driver.extraClassPath', '/home/ubuntu/spark/jars/aws-java-sdk-1.11.335.jar:/home/ubuntu/spark/jars/hadoop-aws-2.8.4.jar') \
            .appName("cluster").getOrCreate()
df = spark.read.load('s3a://bucket/path/to/file')

~/miniconda3/envs/audience/lib/python3.6/site-packages/py4j/protocol.py in get_return_value(应答,gateway_client,target_id,name)318 Rise Py4JJavaError(319“调用{0}{1}{2}时出错.\n”。-->320格式(target_id,“.”,name),value)321 else:322 Rise Py4JError(

如果我将s3a更改为s3s3n,它将请求aws访问密钥。但是,我已经在IAM中给出了ec2实例Amazons3FullAccess

IllegalArgumentException:“必须分别通过设置fs.s3.awsAccessKeyID和fs.s3.awsSecretAccessKey属性来指定AWS访问密钥ID和秘密访问密钥。”

如有任何帮助,我们将不胜感激。

共有1个答案

姚浩歌
2023-03-14

您需要一种向脚本公开AWS凭据的方法。

下面使用botocore的示例可能会超出范围,但使您不必滚动自己的AWS配置或凭据解析器。

首先,

from pyspark.sql import SparkSession
import botocore.session

session = botocore.session.get_session()
credentials = session.get_credentials()

spark = (
    SparkSession
    .builder
    .config(
        'spark.driver.extraClassPath', 
        '/home/ubuntu/spark/jars/aws-java-sdk-1.11.335.jar:'
        '/home/ubuntu/spark/jars/hadoop-aws-2.8.4.jar')
    .config('fs.s3a.access.key', credentials.access_key)
    .config('fs.s3a.secret.key', credentials.secret_key)
    .appName("cluster")
    .getOrCreate()
)

df = spark.read.load('s3a://bucket/path/to/file')

编辑

在使用s3n文件系统客户端时,身份验证属性如下所示

.config('fs.s3n.awsAccessKeyId', credentials.access_key)
.config('fs.s3n.awsSecretAccessKey', credentials.secret_key)
 类似资料:
  • 我正在从Cloudera包裹中运行带有Spark 0.9.0的CDH 4.4。 我有一堆Avro文件是通过Pig的AvroStorage UDF创建的。我想在 Spark 中加载这些文件,使用通用记录或载入 Avro 文件的架构。到目前为止,我已经尝试过这个: 这适用于一个文件,但它不能扩展——我将所有数据加载到本地RAM中,然后从那里跨spark节点分发。

  • 我一直在尝试使用Spark中的加载本地文件。 我已经读过[问题]:如何在sc.textfile中加载本地文件,而不是HDFS Centos 7.0上中有本地文件 使用时,出现如下错误。 16/12/27 12:15:56警告TaskSetManager:stage 5.0中丢失任务0.0(TID 36,):java.io.FileNotFoundException:File File:/home/

  • 问题内容: 我想将Spark参数(例如输入文件,输出文件)存储到Java属性文件中,然后将该文件传递到Spark Driver中。我正在使用spark- submit提交作业,但是找不到参数来传递属性文件。你有什么建议吗? 问题答案: 在这里,我找到了一种解决方案: props文件 :(mypropsfile.conf)// 注意:密钥的前缀为“ spark”。 否则道具将被忽略。 发射 如何调用

  • 我是Spark的新手,我正在尝试使用Spark从文件中读取CSV数据。以下是我正在做的: 我希望这个调用会给我一个文件前两列的列表,但我遇到了以下错误: 索引器中第1行的文件“”:列表索引超出范围 虽然我的CSV文件不止一列。

  • 当我在spack-2.2.0中加载xml文件时,如下所示: 它向我展示了一个错误: JAVAlang.ClassNotFoundException:未能找到数据源:xml。请在http://spark.apache.org/third-party-projects.html在org。阿帕奇。火花sql。处决数据源。数据源$。org上的lookUpdateSource(DataSource.scal

  • 我最近在Android Studio中又安装了一个Android SDK,即SDK版本4.4(API级别19),在与我的项目一起使用后,它在项目的文件夹()中添加了一组文件夹。 我既不明白为什么,也不明白如何使用它们。 我在SO上读到另一个关于它的问题。 答案是: 我还是不明白为什么要这样做。 为什么我们不能把应用程序图标也放在文件夹中呢? 此外,如果只应将应用程序图标放置在文件夹中,我如何创建其