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时,我可以更改二进制文件的所有内容。并且二进制文件是可拆分的。我没有任何想法解析二进制文件,如上面的示例代码。所以到目前为止我无法尝试任何事情。
答案 0 :(得分:0)
有一个二进制记录阅读器已经可用于spark(我相信在1.3.1中可用,至少在scala api中)。
sc.binaryRecord(path: string, recordLength: int, conf)
虽然可以将这些二进制文件转换为可接受的格式进行处理。