我整个上午都在寻找这个问题的明确答案,但找不到任何可以理解的东西。我刚开始使用 pyspark(用 pip 安装),有一个简单的 .py 文件从本地存储读取数据,在本地做一些处理和写入结果。我目前正在使用:python my_file.py
我想要做的是: 使用 AWS S3 中的文件作为输入,将结果写入 AWS3 上的存储桶
我能够使用“boto3”创建一个存储桶和加载文件,但看到一些使用“spark.read.csv”的选项,我想使用它。
我尝试过的: 我尝试使用以下方法设置凭据:
spark = SparkSession.builder \
.appName("my_app") \
.config('spark.sql.codegen.wholeStage', False) \
.getOrCreate()\
spark._jsc.hadoopConfiguration().set("fs.s3a.awsAccessKeyId", "my_key_id")
spark._jsc.hadoopConfiguration().set("fs.s3a.awsSecretAccessKey", "my_secret_key")
Run Code Online (Sandbox Code Playgroud)
然后 :
df = spark.read.option("delimiter", ",").csv("s3a://bucket/key/filename.csv", header = True)
Run Code Online (Sandbox Code Playgroud)
但得到错误:
java.io.IOException: No FileSystem for scheme: s3a
Run Code Online (Sandbox Code Playgroud)
问题 :
谢谢大家,抱歉重复的问题
解决了 :
解决方案如下:
要将本地 spark 实例链接到 S3,您必须将 aws-sdk 和 hadoop-sdk 的 jar 文件添加到您的类路径并使用以下命令运行您的应用程序:spark-submit --jars my_jars.jar
请注意您用于 SDK 的版本,并非所有版本都兼容:aws-java-sdk-1.7.4、hadoop-aws-2.7.4 对我有用。
我使用的配置是:
spark = SparkSession.builder \ …Run Code Online (Sandbox Code Playgroud) 我在独立模式下有一个Apache Spark集群(2.2.0)。直到现在使用HDFS来运行镶木地板文件。我正在使用Apache Hive 1.2的Hive Metastore Service通过Thriftserver通过JDBC访问Spark。
现在,我想使用S3对象存储而不是HDFS。我在hive-site.xml中添加了以下配置:
<property>
<name>fs.s3a.access.key</name>
<value>access_key</value>
<description>Profitbricks Access Key</description>
</property>
<property>
<name>fs.s3a.secret.key</name>
<value>secret_key</value>
<description>Profitbricks Secret Key</description>
</property>
<property>
<name>fs.s3a.endpoint</name>
<value>s3-de-central.profitbricks.com</value>
<description>ProfitBricks S3 Object Storage Endpoint</description>
</property>
<property>
<name>fs.s3a.endpoint.http.port</name>
<value>80</value>
<description>ProfitBricks S3 Object Storage Endpoint HTTP Port</description>
</property>
<property>
<name>fs.s3a.endpoint.https.port</name>
<value>443</value>
<description>ProfitBricks S3 Object Storage Endpoint HTTPS Port</description>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>s3a://dev.spark.my_bucket/parquet/</value>
<description>Profitbricks S3 Object Storage Hive Warehouse Location</description>
</property>
Run Code Online (Sandbox Code Playgroud)
我在MySQL 5.7数据库中有配置单元metastore。我已将以下jar文件添加到Hive lib文件夹中:
我已经在MySQL上删除了旧的配置单元metastore模式,然后使用以下命令启动了metastore服务:hive --service metastore &并且出现以下错误:
java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/ObjectMapper
at com.amazonaws.util.json.Jackson.<clinit>(Jackson.java:27)
at com.amazonaws.internal.config.InternalConfig.loadfrom(InternalConfig.java:182) …Run Code Online (Sandbox Code Playgroud)