如何将二进制文件更改为 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?