我有大量超过 40 列的制表符分隔文件。我想对其应用聚合,只选择几列。我认为 Apache Spark 是最好的选择,因为我的文件存储在 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 输出的 part-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 的新手。
最佳答案
次要观察:你说你的文件是制表符分隔的,但你似乎使用 ,.... 分割行。你可能想更正它并运行?如果您的数据是制表符分隔的,则 sd 可能没有真正的模式
关于hadoop - Apache Spark JavaSchemaRDD 是空的,即使它的输入 RDD 有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30082401/