【问题标题】:Reading Files from S3 Bucket to PySpark Dataframe Boto3从 S3 存储桶读取文件到 PySpark Dataframe Boto3
【发布时间】:2018-11-07 06:49:11
【问题描述】:

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

【问题讨论】:

    标签: apache-spark amazon-s3 pyspark boto3


    【解决方案1】:

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

    我建议使用

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

    然后,您可以使用 SparkSQL 过滤和连接数据帧。

    注意:JSON files need to contain single JSON objects each on their own line

    【讨论】:

    • 你的意思是我不应该将多种文件类型合并到一个数据框中?在 PySpark 框架中组合来自多个来源/类型的数据的正确方法是什么?
    • 我得到一个 No FileSystem for scheme: s3 错误。而且我还尝试了 s3n 和 s3a,但出现了类似的错误。
    • 要加载多种类型,您需要不同的解析器,如图所示......您加入或合并数据框以将所有数据以统一格式放在一起。关于错误,它应该已经可以在 EMR 上运行,但请参阅 stackoverflow.com/a/33787125/2308683
    • 原来我在 EMR 上的 conda 安装使用的 pyspark 与安装的不同。
    • 是的,如果你的集群已经有 Spark,你不需要 Conda 来管理它
    猜你喜欢
    • 2017-09-29
    • 2016-07-12
    • 1970-01-01
    • 2019-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    相关资源
    最近更新 更多