8

「Vector」などの Java シリアル化オブジェクトを含むファイルがあります。このファイルを Hadoop Distributed File System (HDFS) に保存しました。ここで、map タスクの 1 つでこのファイルを (メソッド readObject を使用して) 読み取るつもりです。私は考えます

FileInputStream in = new FileInputStream("hdfs/path/to/file");

ファイルは HDFS 経由で保存されるため、機能しません。そこで、org.apache.hadoop.fs.FileSystem クラスを使用することを考えました。残念ながら、FileInputStream を返すメソッドはありません。それが持っているのは FSDataInputStream を返すメソッドだけですが、FSDataInputStream が行うプリミティブ データ型だけでなく、ベクトルなどのシリアル化された Java オブジェクトをファイルから読み取ることができる入力ストリームが必要です。

助けてください!

4

2 に答える 2

6

FileInputStreamでは、シリアル化されたオブジェクトを直接読み取ることは容易ではありません。それをObjectInputStreamにラップする必要があります。FSDataInputStreamで同じことを行うことができます。それをObjectInputStreamにラップするだけで、そこからオブジェクトを読み取ることができます。

fileSystemつまり、 typeがある場合は、次をorg.apache.hadoop.fs.FileSystem使用します。

ObjectInputStream in = new ObjectInputStream(fileSystem.open(path));
于 2010-05-15T12:47:01.770 に答える
-1

このように FSDataInputStream を変換する必要があります (scala コード)

val hadoopConf = new org.apache.hadoop.conf.Configuration()
val hdfs = org.apache.hadoop.fs.FileSystem.get(new     java.net.URI("hdfs://nameserv"), hadoopConf)

val in = hdfs.open(new org.apache.hadoop.fs.Path("hdfs://nameserv/somepath/myfile")).asInstanceOf[java.io.InputStream]
于 2016-12-13T16:10:10.927 に答える