2017-03-20 24 views
0

我試圖將JSON文件轉換爲CSV。HDS上的JSON轉換爲CSV

我有一個JAVA代碼,它能夠在UNIX文件系統和本地文件系統上完美實現它。 我已經在主類下面寫了在HDFS上執行這個轉換。

public class ClassMain { 

    public static void main(String[] args) throws IOException { 


     String uri = args[1]; 
     String uri1 = args[2]; 
     Configuration conf = new Configuration(); 
     FileSystem fs = FileSystem.get(URI.create(uri), conf); 
     FSDataInputStream in = null; 
     FSDataOutputStream out = fs.create(new Path(uri1)); 
     try{ 

      in = fs.open(new Path(uri)); 

      JsonToCSV toCSV = new JsonToCSV(uri); 
      toCSV.json2Sheet().write2csv(uri1); 
      IOUtils.copyBytes(in, out, 4096, false); 

      } 
     finally{ 
      IOUtils.closeStream(in); 
      IOUtils.closeStream(out); 
     } 
    } 

} 

json2sheet和write2csv是其中執行轉換和寫入操作的方法。

我使用下面的命令運行這個jar:

hadoop jar json-csv-hdfs.jar com.nishant.ClassMain /nishant/large.json /nishant/output 

的問題是,它並沒有寫在/ NISHANT /輸出任何東西。它創建一個0大小/ nishant /輸出文件。

也許在這裏使用copyBytes不是一個好主意。

如何在HDFS上實現這一點,如果它在unix FS和本地FS上工作正常。

在這裏,我試圖JSON文件轉換爲CSV,而不是試圖JSON對象映射到它們的值

+0

不,它不是類似的問題。這裏我試圖將JSON文件轉換爲CSV。在你提到的鏈接中,它試圖將JSON對象映射到它們的值。 – earl

+0

爲什麼你不像Spark SQL,Hive這樣的SQL工具? – mrsrinivas

回答

0

文件系統只需要一個配置項成功連接到HDFS。

conf.set(key, "hdfs://host:port"); // where key="fs.default.name"|"fs.defaultFS"