首页 > 解决方案 > 从 S3 存储桶读取文件到 PySpark Dataframe Boto3

问题描述

如何将 S3 存储桶中的一堆文件加载到单个 PySpark 数据帧中?我在 EMR 实例上运行。如果文件是本地文件,我可以使用 SparkContext textFile 方法。但是当文件在 S3 上时,如何使用 boto3 将多个不同类型(CSV、JSON、...)的文件加载到单个数据帧中进行处理?

标签: apache-sparkamazon-s3pysparkboto3

解决方案


Spark 使用 Hadoop API 从 S3 本地读取,而不是 Boto3。并且textFile用于读取 RDD,而不是 DataFrames。也不要尝试将两种不同的格式加载到单个数据帧中,因为您将无法始终如一地解析它们

我建议使用

csvDf = spark.read.csv("s3a://path/to/files/*.csv")
jsonDf = spark.read.json("s3a://path/to/files/*.json")

从那里,您可以使用 SparkSQL 过滤和连接数据帧。

注意:JSON 文件需要包含单个 JSON 对象,每个对象都在自己的行中


推荐阅读