0

我有以下格式的 JavaPairRDD:

JavaPairRDD< String, Tuple2< String, List< String>>> myData;

我想将其保存为 Key-Value 格式(String, Tuple2< String, List< String>>)

myData.saveAsXXXFile("output-path");

所以我的下一份工作可以直接将数据读入我的JavaPairRDD

JavaPairRDD< String, Tuple2< String, List< String>>> newData = context.XXXFile("output-path");

我正在使用 Java 7、Spark 1.2、Java API。我试过了saveAsTextFilesaveAsObjectFile都不管用。而且我saveAsSequenceFile在日食中看不到选项。

有人对这个问题有什么建议吗?非常感谢!

4

1 回答 1

3

您可以使用通过 scala 中的隐式使用的SequenceFileRDDFunctions,但这可能比使用 java 的通常建议更糟糕:

myData.saveAsHadoopFile(fileName, Text.class, CustomWritable.class,
                        SequenceFileOutputFormat.class);

CustomWritable通过扩展实现

org.apache.hadoop.io.Writable

像这样的东西应该可以工作(没有检查编译):

public class MyWritable extends Writable{
  private String _1;
  private String[] _2;

  public MyWritable(Tuple2<String, String[]> data){
    _1 = data._1;
    _2 = data._2;
  }

  public Tuple2<String, String[]> get(){
    return new Tuple2(_1, _2);
  }

  @Override
  public void readFields(DataInput in) throws IOException {
    _1 = WritableUtils.readString(in);
    ArrayWritable _2Writable = new ArrayWritable();
    _2Writable.readFields(in);
    _2 = _2Writable.toStrings();
  }

  @Override
  public void write(DataOutput out) throws IOException {
    Text.writeString(out, _1);
    ArrayWritable _2Writable = new ArrayWritable(_2);
    _2Writable.write(out);
  }
}

使其适合您的数据模型。

于 2015-04-06T00:50:36.197 回答