Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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 pyspark如何加载压缩的snappy文件_Apache Spark_Pyspark_Snappy - Fatal编程技术网

Apache spark pyspark如何加载压缩的snappy文件

Apache spark pyspark如何加载压缩的snappy文件,apache-spark,pyspark,snappy,Apache Spark,Pyspark,Snappy,我已经使用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

我已经使用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()文件

/首页/user/Software/spark-1.3.0-bin-hadoop2.4/python/pyspark/rdd.pyc(self) 1244如果rs: 1245返回卢比[0] ->1246提升值错误(“RDD为空”) 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'

这里的问题是python snappy与Hadoop的snappy编解码器不兼容,Spark在看到“.snappy”后缀时将使用它来读取数据。它们基于相同的底层算法,但它们不兼容,因为您可以使用一种算法进行压缩,也可以使用另一种算法进行解压缩


您可以通过使用Spark或Hadoop将数据首先写入snappy来实现这一点。或者让Spark将数据读取为二进制blob,然后自己手动调用python snappy解压(请参见此处的binaryFiles)。二进制blob方法有点脆弱,因为它需要为每个输入文件在内存中容纳整个文件。但是,如果您的数据足够小,就可以使用。

好吧,我找到了一个解决方案

建造这个。。。 在Ubuntu14.10上,我不得不安装gcc-4.4来构建它,我在这里看到了我的错误

现在,我可以在命令行中使用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'

不确定我的文件使用了哪种
snappy
编解码器,但是
spark.read.text
对我来说没有任何问题。

接受的答案现在过时了。您可以使用python snappy压缩hadoop snappy,但实际上没有文档。 例如:

您还可以使用命令行,其中的选项更直接,使用-t hadoop\u snappy标志。例如:


echo“{'test':'somevalue','test2':'somevalue2'}”| python-msnappy-t hadoop_snappy-c-test.json.snappy

请改进您的问题。另外,请提供更多相关代码(例如-如何保存文件),这非常有意义。我读了更多关于Hadoop的snappy编解码器的内容,它似乎用于在减少所有内容之前从映射器生成的中间文件。在将文本文件推送到hdfs存储区之前,是否可以使用命令行实用程序使用hadoop snappy编解码器压缩文本文件?我基本上有10000个5000万行的文本文件。看起来这可能行得通……这已经过时了,python snappy支持hadoop snappy,尽管还不是很清楚。
import snappy
with open('test.json.snappy', 'wb') as out_file:
    data=json.dumps({'test':'somevalue','test2':'somevalue2'}).encode('utf-8')
    compressor = snappy.hadoop_snappy.StreamCompressor()
    compressed = compressor.compress(data)
    out_file.write(compressed)