2015-11-05 84 views
0

http://spark.apache.org/docs/latest/sql-programming-guide.html#interoperating-with-rdds如何將二進制文件更改爲RDD或數據框?

該鏈接顯示如何將txt文件更改爲RDD,然後更改爲Dataframe。

那麼如何處理二進制文件呢?

問一個例子,非常感謝。

有沒有在這裏回答類似的問題:reading binary data into (py) spark DataFrame

更詳細的,我不知道如何解析。比如二進制文件,我可以分析txt文件爲行或詞是這樣的:

JavaRDD<Person> people = sc.textFile("examples/src/main/resources/people.txt").map(
    new Function<String, Person>() { 
    public Person call(String line) throws Exception { 
     String[] parts = line.split(","); 

     Person person = new Person(); 
     person.setName(parts[0]); 
     person.setAge(Integer.parseInt(parts[1].trim())); 

     return person; 
    } 
    }); 

看來,我只是需要,可以分析二進制文件或二進制流像這樣的API:

JavaRDD<Person> people = sc.textFile("examples/src/main/resources/people.bin").map(
     new Function<String, Person>() { 
     public Person call(/*stream or binary file*/) throws Exception { 
      /*code to construct every row*/ 
      return person; 
     } 
     }); 

編輯: 二進制文件包含結構數據(關係數據庫的表,數據庫是一個自制的數據庫),我知道結構數據的元信息。我計劃將結構數據更改爲RDD [行] 。

當我使用FileSystem的API(http://hadoop.apache.org/docs/current/api/org/apache/hadoop/fs/FileSystem.html)將二進制流寫入HDFS時,我可以更改二進制文件的所有內容。二進制文件是可拆分的。我沒有任何想法解析二進制文件,如上面的示例代碼。所以到目前爲止我無法嘗試任何東西。

+0

什麼是二進制文件?數據是什麼?你如何解碼?你打算如何在數據幀中編碼這些數據? – zero323

+0

@ zero323該數據是關係數據庫的表。並且我計劃將數據更改爲RDD [Row] –

+0

請閱讀[我如何問一個好問題?](https://stackoverflow.com/help/how-到問)。儘量提供足夠的細節,至少讓別人有機會回答這個問題。什麼數據庫?這是如何創建的?你有權訪問格式定義嗎?這個文件是可拆分的嗎?你到目前爲止嘗試過什麼,爲什麼它不起作用?很可能這個問題應該關閉,但現在你不給我們提供任何幫助。 – zero323

回答

0

有一個二進制記錄閱讀器已經可用於火花(我相信在1.3.1中可用,至少在scala api中)。

sc.binaryRecord(path: string, recordLength: int, conf) 

它雖然將您轉換爲可接受的格式進行處理。