【问题标题】:Persisting RDD on Amazon S3在 Amazon S3 上持久化 RDD
【发布时间】:2014-08-25 01:27:22
【问题描述】:

我在 Amazon S3 上有一个包含 JSON 对象的大型文本文件。我计划在 Amazon EMR 上使用 Spark 处理这些数据。

这是我的问题:

  1. 如何将包含 JSON 对象的文本文件加载到 Spark 中?
  2. 在 EMR 集群关闭后,是否可以在 S3 上保留此数据的内部 RDD 表示?
  3. 如果我能够持久化 RDD 表示,是否可以在下次需要分析相同数据时直接加载 RDD 格式的数据?

【问题讨论】:

    标签: json amazon-s3 apache-spark


    【解决方案1】:

    这应该涵盖 #1,只要您使用的是 pyspark:

    #Configure spark with your S3 access keys
    sc._jsc.hadoopConfiguration().set("fs.s3n.awsAccessKeyId", "MY-ACCESS-KEY")
    sc._jsc.hadoopConfiguration().set("fs.s3n.awsSecretAccessKey", "MY-SECRET-ACCESS-KEY")
    
    #Retrieve the data
    my_data = sc.textFile("s3n://my-bucket-name/my-key")
    my_data.count() #Count all rows
    my_data.take(20) #Take the first 20 rows
    
    #Parse it
    import json
    my_data.map(lambda x: json.loads(x)).take(20) #Take the first 20 rows of json-parsed content
    

    注意 s3 地址是s3n://,而不是s3://。这是 hadoop 的遗留问题。

    另外,my-key 可以指向整个 S3 目录*。如果您使用的是 spark 集群,导入多个中型文件通常比导入一个大文件要快。

    对于#2 和#3,我建议查找 spark 的 parquet 支持。您还可以将文本保存回 s3:

    my_data.map(lambda x: json.dumps(x)).saveAsTextFile('s3://my-bucket-name/my-new-key')
    

    不知道数据集的大小和管道的计算复杂性,我不能说将中间数据存储到 S3 的哪种方式最能充分利用您的资源。

    *S3 并没有真正的目录,但你知道我的意思。

    【讨论】:

      猜你喜欢
      • 2016-07-17
      • 1970-01-01
      • 2016-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多