hadoop - Apache Spark JavaSchemaRDD 是空的,即使它的输入 RDD 有数据

标签 hadoop apache-spark

我有大量超过 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/

相关文章:

hadoop - 从网站检索数据-hadoop

hadoop - 在 Hadoop 中按小时分区会导致什么问题?

java - 海量多道程序和只读文件访问

java - Matrix Spark,更改Java代码中的值

scala - 尝试创建 scala jar 时出现下载失败错误

hadoop - HBase 能否提供对其单元的实时写入/读取访问?

hadoop - Tez-DAGAppMaster-java.lang.IllegalArgumentException:无效的ContainerId

scala - 基于SUM的IN聚合,使用Scala在Apache Spark Dataframe中选择特定的行值

apache-spark - 如何在 Spark 数据集上使用分组依据

scala - Spark 应用程序如何开始使用 sbt run。