Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 如何从Spark PairRDD存储和读取数据_Apache Spark - Fatal编程技术网

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

Apache spark 如何从Spark PairRDD存储和读取数据,apache-spark,Apache Spark,Spark Pairdd具有保存文件的选项 JavaRDD<String> baseRDD = context.parallelize(Arrays.asList("This", "is", "dummy", "data")); JavaPairRDD<String, Integer> myPairRDD = baseRDD.mapToPair(new PairFunction<String, String, Integer>() {

Spark Pairdd具有保存文件的选项

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");
javarddbaserdd=context.parallelize(Arrays.asList(“This”、“is”、“dummy”、“data”));
没药=
baseRDD.mapToPair(新的PairFunction(){
@凌驾
公共Tuple2调用(字符串输入)引发异常{
//TODO自动生成的方法存根
返回新的Tuple2(input,input.length());
}
});
mypairdd.saveAsTextFile(“路径”);
Spark context
textfile
仅将数据读取到JavaRDD

如何直接从源代码重构PairRDD

注意:

  • 可能的方法是将数据读取到
    JavaRDD
    并构造
    javapairdd

但由于数据量巨大,这需要大量的资源

  • 以非文本格式存储此中间文件也可以

  • 执行环境-JRE 1.7


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

保存文件:

然后你可以这样读对:

javapairdd.fromJavaRDD(sc.objectFile(path))
编辑:

工作示例:

JavaRDD-rdd=sc.parallelize(Lists.newArrayList(“1”、“2”));
mapToPair(p->newtuple2(p,p)).saveAsObjectFile(“c://example”);
javapairdd pairdd
=javapairdd.fromJavaRDD(sc.objectFile(“c://example”);
pairdd.collect().forEach(System.out::println);

在序列文件中存储Spark PairRDD在这种情况下效果很好

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

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

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

myPairRDD.saveAsHadoopFile(path , Text.class, IntWritable.class,
    SequenceFileOutputFormat.class);

JavaPairRDD<Text, IntWritable> newbaseRDD =
    context.sequenceFile(path , Text.class, IntWritable.class);

// Verify the data
System.out.println(myPairRDD.collect());
newbaseRDD.foreach(new VoidFunction<Tuple2<Text, IntWritable>>() {
  @Override
  public void call(Tuple2<Text, IntWritable> arg0) throws Exception {
    System.out.println(arg0);
  }
});
javarddbaserdd=context.parallelize(Arrays.asList(“This”、“is”、“dummy”、“data”));
javapairdd mypairdd=baseRDD.mapToPair(新的PairFunction(){
@凌驾
公共Tuple2调用(字符串输入)引发异常{
//TODO自动生成的方法存根
返回新的Tuple2(新文本(input),新的intwriteable(input.length());
}
});
myPairRDD.saveAsHadoopFile(路径,Text.class,IntWritable.class,
SequenceFileOutputFormat.class);
JavaPairdd newbaseRDD=
context.sequenceFile(路径,Text.class,IntWritable.class);
//验证数据
System.out.println(mypairdd.collect());
newbaseRDD.foreach(新的VoidFunction(){
@凌驾
公共void调用(Tuple2 arg0)引发异常{
系统输出打印项次(arg0);
}
});
正如所建议的,以下代码适用于Java8

myPairRDD.saveAsObjectFile(path);
JavaPairRDD<String, String> objpairRDD = JavaPairRDD.fromJavaRDD(context.objectFile(path));
objpairRDD.collect().forEach(System.out::println);
mypairdd.saveAsObject文件(路径);
javapairdd objpairRDD=javapairdd.fromJavaRDD(context.objectFile(path));
objpairRDD.collect().forEach(System.out::println);
使用Scala的示例:

读取文本文件并将其另存为对象文件格式

val ordersRDD = sc.textFile("/home/cloudera/orders.txt");
ordersRDD.count();
ordersRDD.saveAsObjectFile("orders_save_obj");
正在读取对象文件并将其另存为文本文件格式:

val ordersRDD = sc.objectFile[String]("/home/cloudera/orders.txt");
ordersRDD.count();
ordersRDD.saveAsTextFile("orders_save_text");

如果不介意结果文件不可读,可以将它们另存为对象文件。是的,对象文件也很好。javapairdd.fromJavaRDD可以将带有元组的JavaRDD转换为javapairdd。请查找我遇到错误的源代码:类型为javapairdd的JavaRDD(JavaRDD)方法不适用于参数(JavaRDD)@VijayInnamuri我真的不明白你的问题是什么,我将添加工作示例。+1获得令人敬畏的答案。这在Java8中可以正常工作,但在Java7中不行。。上述错误是由于Java版本兼容性造成的。@user52045是否必须使用javapairdd函数保存文件?我正在尝试使用JavaRDD并对其进行迭代。我不想在系统中保存rdd
val ordersRDD = sc.objectFile[String]("/home/cloudera/orders.txt");
ordersRDD.count();
ordersRDD.saveAsTextFile("orders_save_text");