PySpark 本地读取 S3 文件通过 Spark(或更好的:pyspark)
在本文中,我们将介绍如何在 PySpark 中通过 Spark 进行本地读取 S3 文件。Spark 是一个强大的分布式计算框架,可用于处理大规模数据集。而 PySpark 是 Spark 的 Python 接口,方便了 Python 开发人员使用 Spark 的功能。
阅读更多:PySpark 教程
什么是 S3?
Amazon Simple Storage Service(简称 S3)是由亚马逊提供的一种对象存储服务。它可用于存储和检索各种类型的数据,包括文本文件、图像、视频等。S3 具有高可靠性、可扩展性和安全性,被广泛用于数据存储和数据处理。
在 PySpark 中读取 S3 文件
在 PySpark 中,我们可以使用 SparkContext
对象来读取 S3 文件。首先,我们需要创建一个 SparkContext 对象,然后使用它的 textFile
方法读取 S3 文件。以下是一个示例:
from pyspark import SparkContext
# 创建 SparkContext 对象
sc = SparkContext(appName="ReadS3File")
# 读取 S3 文件
lines = sc.textFile("s3a://your-bucket-name/your-file.txt")
# 打印文件内容
for line in lines.collect():
print(line)
# 关闭 SparkContext
sc.stop()
在上面的示例中,我们首先创建了一个名为 “ReadS3File” 的 SparkContext 对象。然后,使用 textFile
方法读取了一个名为 “your-file.txt” 的 S3 文件,该文件位于 “your-bucket-name” 存储桶中。最后,我们使用 collect
方法收集并打印了文件的内容。记得最后停止 SparkContext。
使用 AWS 认证
要在 PySpark 中访问 S3 存储桶,我们需要提供 AWS 的访问凭证。以下是两种常见的认证方式:
使用环境变量
一种常见的方式是在运行 PySpark 代码之前设置 AWS 访问凭证的环境变量。您可以设置以下环境变量:
export AWS_ACCESS_KEY_ID=your-access-key
export AWS_SECRET_ACCESS_KEY=your-secret-key
然后,PySpark 将自动使用这些环境变量进行身份验证。
使用配置
另一种方式是在 PySpark 代码中提供 AWS 访问凭证的配置。您可以通过创建 SparkConf
对象并设置 spark.hadoop
前缀的配置属性来实现。以下是一个示例:
from pyspark import SparkConf, SparkContext
# 创建 SparkConf 对象
conf = SparkConf().setAppName("ReadS3File").setMaster("local[*]") \
.set("spark.hadoop.fs.s3a.access.key", "your-access-key") \
.set("spark.hadoop.fs.s3a.secret.key", "your-secret-key")
# 创建 SparkContext 对象
sc = SparkContext(conf=conf)
# 读取 S3 文件
lines = sc.textFile("s3a://your-bucket-name/your-file.txt")
# 打印文件内容
for line in lines.collect():
print(line)
# 关闭 SparkContext
sc.stop()
在上面的示例中,我们通过创建一个 SparkConf
对象来设置 Spark 的配置属性,使用了您的 AWS 访问凭证。然后,我们将该 SparkConf
对象传递给 SparkContext
对象来创建 SparkContext。
通过 SparkSession 读取 S3 文件
除了使用 SparkContext,我们还可以使用 SparkSession 来读取 S3 文件。SparkSession 是 Spark 2.0 之后的新特性,它提供了更便利的 API。
以下是一个使用 SparkSession 读取 S3 文件的示例:
from pyspark.sql import SparkSession
# 创建 SparkSession 对象
spark = SparkSession.builder \
.appName("ReadS3File") \
.getOrCreate()
# 读取 S3 文件
df = spark.read.text("s3a://your-bucket-name/your-file.txt")
# 打印文件内容
df.show()
# 关闭 SparkSession
spark.stop()
在上面的示例中,我们首先使用 SparkSession.builder
创建了一个 SparkSession 对象。然后,使用该对象的 read.text
方法读取了一个名为 “your-file.txt” 的 S3 文件,该文件位于 “your-bucket-name” 存储桶中。最后,我们使用 show
方法打印了文件的内容。
总结
在本文中,我们介绍了如何在 PySpark 中通过 Spark 本地读取 S3 文件。首先,我们使用 SparkContext 和 textFile 方法来读取文件,并且演示了如何使用环境变量和配置提供 AWS 认证。然后,我们还介绍了使用 SparkSession 的方法来读取 S3 文件。希望本文对您在 PySpark 中读取 S3 文件有所帮助!