apache-spark - 如何从 Spark PairRDD 存储和读取数据

标签 apache-spark

Spark PairRDD 可以选择保存文件。

JavaRDD<String> baseRDD = context.parallelize(Arrays.asList("This", "is", "dummy", "data"));

JavaPairRDD<String, Integer> myPairRDD =
    baseRDD.mapToPair(new PairFunction<String, String, Integer>() {

      @Override
      public Tuple2<String, Integer> call(String input) throws Exception {
        // TODO Auto-generated method stub
        return new Tuple2<String, Integer>(input, input.length());
      }
    });

myPairRDD.saveAsTextFile("path");

Spark 上下文 textfile仅将数据读取到 JavaRDD。

如何直接从源重建 PairRDD?

注:
  • 可能的做法是将数据读到JavaRDD<String>并构建 JavaPairRDD .

  • 但是对于庞大的数据,它需要大量的资源。
  • 以非文本格式存储这个中间文件也可以。
  • 执行环境 - JRE 1.7
  • 最佳答案

    如果您不介意结果文件不是人类可读的,您可以将它们保存为目标文件。

    保存存档:

    myPairRDD.saveAsObjectFile(path);
    

    然后你可以像这样阅读对:

    JavaPairRDD.fromJavaRDD(sc.objectFile(path))
    

    编辑:

    工作示例:

    JavaRDD<String> rdd = sc.parallelize(Lists.newArrayList("1", "2"));
    rdd.mapToPair(p -> new Tuple2<>(p, p)).saveAsObjectFile("c://example");
    JavaPairRDD<String, String> pairRDD 
        = JavaPairRDD.fromJavaRDD(sc.objectFile("c://example"));
    pairRDD.collect().forEach(System.out::println);
    

    关于apache-spark - 如何从 Spark PairRDD 存储和读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30500141/

    相关文章:

    java - 使用 Statistic.stat 时如何避免收集

    amazon-web-services - Spark 无法使用公共(public) IP 在端口 7077 上绑定(bind)

    amazon-ec2 - 用于 Ubuntu(或可能是 Centos)的 Spark AMI - 不是 amazon linux?

    list - ":_*"在 Scala 中是什么意思? (使用列表过滤数据框时)

    scala - 如何为 Spark 结构化流编写 JDBC Sink [SparkException : Task not serializable]?

    hdfs - 为什么 spark-shell --master yarn-client 失败(但 pyspark --master yarn 似乎可以工作)?

    sql - 如何使用pyspark从某些字段分组的给定数据集中获取max(date)?

    amazon-web-services - EmrActivity 的输入/输出 - AWS Data Pipeline

    dataframe - Spark : Iterating through columns in each row to create a new dataframe

    python - 如何使用 Lambda 函数为 Python 中的字典分配键和值?