嗨,我有超过40列的制表符分隔文件的大号码。我想对它应用聚合只选择几个列。我认为apachespark是最好的帮助对象,因为我的文件存储在hadoop中。我有以下程序
public class MyPOJO {
int field1;
String field2; etc
}
JavaSparkContext sc;
JavaRDD<String> data = sc.textFile("path/input.csv");
JavaSQLContext sqlContext = new JavaSQLContext(sc);
JavaRDD<Record> rdd_records = sc.textFile(data).map(
new Function<String, Record>() {
public Record call(String line) throws Exception {
String[] fields = line.split(",");
MyPOJO sd = new MyPOJO(fields[0], fields[1], fields[2], fields[3]);
return sd;
}
});
当我应用操作时,上面的代码运行良好 rdd_record.saveAsTextFile("/to/hadoop/");
我可以看到它创建了带有rdd输出的第00000部分文件。但是当我试着做以下的事情时
JavaSchemaRDD table = sqlContext.applySchema(rdd_records, MyPojo.class);
table.printSchema(); //prints just root and empty lines
table.saveAsTextFile("/to/hadoop/path");//prints part file with [] for each line
我不知道问题出在哪里mypojo.class有所有的字段为什么javaschemardd是空的并且在部分文件中没有打印任何内容。请引导我的新Spark。提前谢谢。
2条答案
按热度按时间w3nuxt5m1#
小观察:你说你的文件是用制表符分隔的,但你似乎用…分隔行。你可能想纠正它并运行?如果数据是以制表符分隔的,则sd可能没有真正的架构
a0zr77ik2#
根据spark文档,我为所有字段添加了getter/setter并实现了
Serializable
它开始工作的mypojo类的接口JavaSchemaRDD
包含数据。