6

python-snappy を使用してファイルを圧縮し、hdfs ストアに配置しました。私は今、そのように読み込もうとしていますが、次のトレースバックが表示されます。ファイルを読み込む方法の例が見つからないので、処理できます。テキストファイル(非圧縮)版は問題なく読めます。sc.sequenceFile を使用する必要がありますか? ありがとう!

I first compressed the file and pushed it to hdfs

python-snappy -m snappy -c gene_regions.vcf gene_regions.vcf.snappy
hdfs dfs -put gene_regions.vcf.snappy /

I then added the following to spark-env.sh
export SPARK_EXECUTOR_MEMORY=16G                                                
export HADOOP_HOME=/usr/local/hadoop                                            

export JAVA_LIBRARY_PATH=$JAVA_LIBRARY_PATH:$HADOOP_HOME/lib/native             
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HADOOP_HOME/lib/native                 
export SPARK_LIBRARY_PATH=$SPARK_LIBRARY_PATH:$HADOOP_HOME/lib/native           
export SPARK_CLASSPATH=$SPARK_CLASSPATH:$HADOOP_HOME/lib/lib/snappy-java-1.1.1.8-SNAPSHOT.jar

I then launch my spark master and slave and finally my ipython notebook where I am executing the code below.

a_file = sc.textFile("hdfs://master:54310/gene_regions.vcf.snappy")
a_file.first()

() 内の ValueError トレースバック (最新の呼び出しが最後) ----> 1 a_file.first()

/home/user/Software/spark-1.3.0-bin-hadoop2.4/python/pyspark/rdd.pyc in first(self) 1244 if rs: 1245 return rs[0] -> 1246 raise ValueError("RDD is空") 1247 1248 def isEmpty(自己):

ValueError: RDD が空です

Working code (uncompressed) text file
a_file = sc.textFile("hdfs://master:54310/gene_regions.vcf")
a_file.first()

出力: u'##fileformat=VCFv4.1'

4

4 に答える 4

3

ここでの問題は、python-snappy が Hadoop の snappy コーデックと互換性がないことです。これは、Spark が「.snappy」サフィックスを検出したときにデータを読み取るために使用するものです。これらは同じ基本アルゴリズムに基づいていますが、あるアルゴリズムで圧縮し、別のアルゴリズムで解凍できるという点で互換性がありません。

Spark または Hadoop を使用して、最初にデータを snappy に書き出すことで、これを機能させることができます。または、Spark にデータをバイナリ BLOB として読み取らせてから、自分で python-snappy 解凍を手動で呼び出します (こちらの binaryFiles を参照してください http://spark.apache.org/docs/latest/api/python/pyspark.html )。バイナリ BLOB アプローチは、入力ファイルごとにファイル全体をメモリに収める必要があるため、もう少し脆弱です。ただし、データが十分に小さい場合は機能します。

于 2015-04-25T22:55:08.233 に答える
0

よし、解決策を見つけた!

これをビルドします... https://github.com/liancheng/snappy-utils ubuntu 14.10では、ビルドするにはgcc-4.4をインストールする必要がありました /p/hadoop-snappy/issues/detail?id=9

コマンドラインでsnappyを使用してテキストファイルを圧縮できるようになりました

snappy -c gene_regions.vcf -o gene_regions.vcf.snappy

hdfsにダンプする

hdfs dfs -put gene_regions.vcf.snappy

そしてそれをpysparkにロードしてください!

a_file = sc.textFile("hdfs://master:54310/gene_regions.vcf.snappy")
a_file.first()

出来上がり!vcf のヘッダー...

u'##fileformat=VCFv4.1'
于 2015-04-27T02:08:21.930 に答える