我在一个目录中有n个zip,我想提取其中的每一个,然后从一个或两个位于zip中的文件中提取一些数据,并将其添加到一个图形DB中。我已经为这件事做了一个顺序的python脚本,但是我不得不将它转换为sequential。我所有的zip都在HDFS目录中。图DB是Neo4j。我还没有学习如何与neo4j连接火花,但我被困在一个更初步的步骤。
我认为我的代码应该是这样的。
# Names of all my zips
zip_names = ["a.zip", "b.zip", "c.zip"]
# function extract_&_populate_graphDB() returns 1 after doing all the work.
# This was done so that a closure can be applied to start the spark job.
sc.parallelize(zip_names).map(extract_&_populate_grapDB).reduce(lambda a, b: a+b)我不能做的测试,这是如何提取拉链和读取文件内。我能够通过sc.textFile读取zip,但是在运行take(1)时,它返回十六进制数据。
那么,在压缩中读取并提取数据是可能的吗?或者,在将数据放入HDFS之前,应该提取数据吗?或者有别的办法来解决这个问题?
发布于 2016-04-06 14:54:51
更新应答*
如果您希望使用Gzip压缩文件,则可以在配置Spark或Spark作业时设置允许您读取和写入压缩数据的参数。
--conf spark.hadoop.mapred.output.compress=True \
--conf spark.hadoop.mapred.output.compression.codec=True \
--conf spark.hadoop.mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec \
--conf spark.hadoop.mapred.output.compression.type: BLOCK将这些添加到当前用于创建shell (例如pyspark)的bash脚本中,您就可以读取和写入压缩数据。
不幸的是,有没有与生俱来的支持Zip文件,所以您需要做更多的腿工作才能达到目的。
https://stackoverflow.com/questions/36436142
复制相似问题