我正在嘗試開發一個Java Spark應用程序,該應用程序從HDFS中讀取AVRO記錄(https://avro.apache.org/),並使用名爲Gobblin(https://github.com/linkedin/gobblin/wiki)的技術。如何使用Java讀取Spark 1.3.1中的AVRO數據?
樣品HDFS AVRO數據文件:
/gobblin/work/job-output/KAFKA/kafka-gobblin-hdfs-test/20150910213846_append/part.task_kafka-gobblin-hdfs-test_1441921123461_0.avro
不幸的是,我發現用Java編寫的例子有限。
- https://spark.apache.org/docs/1.3.1/quick-start.html
- https://spark.apache.org/docs/1.3.1/programming-guide.html
我發現是用Scala編寫的最好的事情(使用Hadoop版本1個庫)。
任何幫助,將不勝感激。
目前我想到了用下面的代碼,雖然我是如何從我的AVRO數據中提取值的HashMap的不確定:
JavaPairRDD avroRDD = sc.newAPIHadoopFile(
path,
AvroKeyInputFormat.class,
AvroKey.class,
NullWritable.class,
new Configuration());
// JavaPairRDD avroRDD = sc.newAPIHadoopFile(
// path,
// AvroKeyValueInputFormat.class,
// AvroKey.class,
// AvroValue.class,
// new Configuration());
我目前的Maven依賴:
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.10</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.apache.avro</groupId>
<artifactId>avro</artifactId>
<version>1.7.6</version>
</dependency>
<dependency>
<groupId>org.apache.avro</groupId>
<artifactId>avro-mapred</artifactId>
<version>1.7.6</version>
<classifier>hadoop2</classifier>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.4.3</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
爲什麼不使用['spark-avro'](https://github.com/databricks/spark-avro)(v.0.0.0)?像這樣的東西應該可以工作:'HashMap options = new HashMap (); options.put(「path」,path); DataFrame df = sqlContext.load(「com.databricks.spark.avro」,options);' –
zero323
理想情況下,只需要針對標準Spark Java API編寫代碼。所以除了Avro的依賴關係之外,我不想使用任何外部庫。 – Mark
另一本名爲「Hadoop應用程序體系結構」[Hadoop應用程序體系結構JavaSessionize示例]的書籍(https://github.com/hadooparchitecturebook/hadoop-arch-book/blob/master/ch08-clickstream/JavaSessionize/src/main /java/com/hadooparchitecturebook/clickstream/JavaSessionize.java),但是,我寧願不必編寫「* .avsc」文件,並依賴avro-maven插件來生成所需的類文件。 – Mark