如何将二进制文件更改为 RDD 或 Dataframe?

Posted

技术标签:

【中文标题】如何将二进制文件更改为 RDD 或 Dataframe?【英文标题】:How to change binary file into RDD or Dataframe? 【发布时间】:2015-11-05 12:20:20 【问题描述】:

http://spark.apache.org/docs/latest/sql-programming-guide.html#interoperating-with-rdds

该链接显示如何将 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 [Row]。

当我使用FileSystem 的API (http://hadoop.apache.org/docs/current/api/org/apache/hadoop/fs/FileSystem.html) 将二进制流写入HDFS 时,我可以更改二进制文件的所有内容。并且二进制文件是可拆分的。我不知道像上面的示例代码那样解析二进制文件。所以到目前为止我什么都不能尝试。

【问题讨论】:

什么二进制文件?数据是什么?你怎么解码?您打算如何将这些数据编码到数据框中? @zero323 数据是关系数据库的表,我打算把数据改成RDD[Row] 请阅读How do I ask a good question?。尽量提供足够的细节,至少让某人有机会回答这个问题。什么数据库?这是如何创建的?您有权访问格式定义吗?这个文件可以拆分吗?到目前为止,您尝试过什么,为什么它不起作用?这个问题很可能应该被关闭,但现在你没有给我们任何继续。 @zero323 感谢您关心这个问题。我会编辑足够的信息。 【参考方案1】:

已经有一个二进制记录阅读器可用于 spark(我相信在 1.3.1 中可用,至少在 scala api 中可用)。

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

不过,您可以将这些二进制文件转换为可接受的格式进行处理。

【讨论】:

以上是关于如何将二进制文件更改为 RDD 或 Dataframe?的主要内容,如果未能解决你的问题,请参考以下文章

检查类型:如何检查某个东西是 RDD 还是 DataFrame?

如何在数据库中存储精确的十进制值

如何将表列从十进制更改为 varchar [重复]

如何使用按位运算符将二进制更改为十进制?

如何将具有多类的 LibSVM 文件转换为 RDD [labelPoint]

.js、css 或 html - 如何将对象更改为两种不同的颜色?