Apache spark 如何从Spark PairRDD存储和读取数据
Spark Pairdd具有保存文件的选项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>() {
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 contexttextfile
仅将数据读取到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");