2015-11-05 83 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) 

它虽然将您转换为可接受的格式进行处理。