2017-01-30 11 views
2

私はpydopを使ってpysparkのファイルを読み書きしています。私は仕事の出力をgzip形式で書きたいと思っています。私の現在のコードは次のようになります。pythonでpydoopを使ってgzipファイルを保存する

def create_data_distributed(workerNum,outputDir, centers, noSamples = 10, var = 0.1): 
numCenters = centers.shape[0] 
dim = centers.shape[1] 
fptr_out = hdfs.hdfs().open_file(os.path.join(outputDir, ("part-%05d" % workerNum)) + ".txt", "w") 
for idx in range(noSamples): 
    idxCenter = np.random.randint(numCenters) 
    sample = centers[idxCenter] + np.random.normal(size=(1,dim)) 
    # output the sample. Need to 
    fptr_out.write("%d, " % idxCenter) 
    for i in range(len(sample[0])): 
     fptr_out.write("%f " %(sample[0][i])) 
     if (i < (len(sample[0])-1)): 
      fptr_out.write(",") 
    fptr_out.write("\n") 
fptr_out.close() 
return 

どのように私は、このコードは、gzipファイルではなく、通常のファイルを開き、書き込みに作るのですか?

ありがとうございました!

答えて

2

私はあなたが返されたファイルのようなオブジェクトラップすることによってそれを行うことができることを期待:あなたは近くの両方で呼び出す必要があり

hdfs_file = hdfs.hdfs().open_file(...) 
fptr_out = gzip.GzipFile(mode='wb', fileobj=hdfs_file) 

注:

gzip.GzipFileなどで

fptr_out = hdfs.hdfs().open_file(...) 

fptr_out.close() 
hdfs_file.close() 

これは、でさらに明確です。 10ステートメント:

output_filename = os.path.join(outputDir, ("part-%05d" % workerNum)) + ".txt.gz" 
with hdfs.hdfs().open_file(output_filename, "wb") as hdfs_file: 
    with gzip.GzipFile(mode='wb', fileobj=hdfs_file) as fptr_out: 
     ... 

これはすべてテストされていません。自己責任。

関連する問題