json - 在 Amazon S3 上持久化 RDD

标签 json amazon-s3 apache-spark

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

以下是我的问题:

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

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

    #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 并没有真正的目录,但你知道我的意思。

    关于json - 在 Amazon S3 上持久化 RDD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24561889/

    相关文章:

    apache-spark - spark 中 cassandra 行的写入时间

    scala - 超出物理限制运行的 Spark 容器

    jquery - 如何从 JSON 对象中的数组获取键名称及其值

    amazon-s3 - docker-registry v2.2.0 S3配置未覆盖

    python - 将非结构化 json 解析为 csv

    php - AWS s3分段上传失败+内存分配耗尽+php

    python - 到最近的 AWS 区域的客户端 IP 地址

    java - Spark Streaming 不对读取 block 执行操作

    json - 如何从 DataContract 中排除类型信息?

    javascript - 如何选择具有特定属性的 JSON 字符串中的所有对象?