2016-03-19 17 views
5

Spark SQL DataFrame.write() yöntemi ile oluşturulan çıktı dosyaları, "part" basename önekiyle başlar. Örneğin. içindeDataFrame.write() için çıktı dosya adı önekini değiştir()

DataFrame sample_07 = hiveContext.table("sample_07"); 
sample_07.write().parquet("sample_07_parquet"); 

Sonuçlar: Ben istiyorum

hdfs dfs -ls sample_07_parquet/                                        
Found 4 items 
-rw-r--r-- 1 rob rob   0 2016-03-19 16:40 sample_07_parquet/_SUCCESS 
-rw-r--r-- 1 rob rob  491 2016-03-19 16:40 sample_07_parquet/_common_metadata 
-rw-r--r-- 1 rob rob  1025 2016-03-19 16:40 sample_07_parquet/_metadata 
-rw-r--r-- 1 rob rob  17194 2016-03-19 16:40 sample_07_parquet/part-r-00000-cefb2ac6-9f44-4ce4-93d9-8e7de3f2cb92.gz.parquet 

Kıvılcım SQL DataFrame.write kullanarak bir dosyayı (oluşturulurken kullanılan çıkış dosya adı öneki) değiştirmek için. Spark içeriği için "mapreduce.output.basename" özelliğini ayarlamayı denedim. Örneğin. Oluşturulan dosyalar için çıkış dosya adı önekini değiştirmedi. Bu, bu dosya için çıktı dosya adı önekini değiştirmedi.

DataFrame.write() yöntemini kullanırken çıkış dosya adı önekini geçersiz kılmanın bir yolu var mı?

cevap

7

Standart çıktı biçimlerinden (Parke gibi) herhangi birini kullanırken "parça" önekini değiştiremezsiniz. ParquetRelation source code bu kod parçasını bakınız: Gerçekten parçası dosya adları denetlemek gerekir

private val recordWriter: RecordWriter[Void, InternalRow] = { 
    val outputFormat = { 
    new ParquetOutputFormat[InternalRow]() { 
     // ... 
     override def getDefaultWorkFile(context: TaskAttemptContext, extension: String): Path = { 
     // .. 
     // prefix is hard-coded here: 
     new Path(path, f"part-r-$split%05d-$uniqueWriteJobId$bucketString$extension") 
    } 
    } 
} 

, muhtemelen özel bir FileOutputFormat uygulamak ve bir FileOutputFormat sınıfını kabul yöntemlerini kurtarmak Kıvılcım en birini kullanmak gerekecektir (örneğin saveAsHadoopFile) .

+0

Cevabınız için teşekkür ederiz. Çok takdir edildi. – Rob