我在一个目录中有n个拉链,我想提取其中的每一个,然后从一个或两个位于拉链内的文件中提取一些数据并将其添加到图形数据库中。我已经为这整个事情制作了一个顺序的python脚本,但我仍然坚持将它转换成火花。我的所有拉链都在HDFS目录中。并且,他的图表DB是Neo4j。我还没有学习如何将spark与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)
时,它返回了十六进制数据。
那么,是否可以读取zip并提取数据?或者,我应该在将数据放入HDFS之前提取数据吗?或者也许有其他方法可以解决这个问题?
答案 0 :(得分:0)
更新答案*
如果您想使用Gzip压缩文件,可以在配置允许读取和写入压缩数据的Spark shell或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的bash脚本中(例如pyspark
),您可以读取和写入压缩数据。
不幸的是,有no innate support of Zip files,所以你需要做更多的工作来实现目标。