Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java中的Spark阅读Avro_Java_Apache Spark_Avro - Fatal编程技术网

使用java中的Spark阅读Avro

使用java中的Spark阅读Avro,java,apache-spark,avro,Java,Apache Spark,Avro,有人能分享一下在spark中使用java阅读avro的例子吗? 找到了scala示例,但对java来说运气不佳。 下面是代码片段,它是代码的一部分,但使用方法ctx.newAPIHadoopFile会遇到编译问题 JavaSparkContext ctx = new JavaSparkContext(sparkConf); Configuration hadoopConf = new Configuration(); JavaRDD<SampleAvro> lines = ctx.n

有人能分享一下在spark中使用java阅读avro的例子吗? 找到了scala示例,但对java来说运气不佳。 下面是代码片段,它是代码的一部分,但使用方法
ctx.newAPIHadoopFile
会遇到编译问题

JavaSparkContext ctx = new JavaSparkContext(sparkConf);
Configuration hadoopConf = new Configuration();
JavaRDD<SampleAvro> lines = ctx.newAPIHadoopFile(path, AvroInputFormat.class, AvroKey.class, NullWritable.class, new Configuration());
JavaSparkContext ctx=新的JavaSparkContext(sparkConf);
Configuration hadoopConf=new Configuration();
JavaRDD lines=ctx.newAPIHadoopFile(路径,AvroInputFormat.class,AvroKey.class,NullWritable.class,新配置());
关于

您可以通过Databricks使用spark avro连接器库。
从Spark SQL读取或写入Avro数据的推荐方法是使用Spark的DataFrame API

连接器支持从Spark SQL读取和写入Avro数据:

import org.apache.spark.sql.*;

SQLContext sqlContext = new SQLContext(sc);

// Creates a DataFrame from a specified file
DataFrame df = sqlContext.read().format("com.databricks.spark.avro")
    .load("src/test/resources/episodes.avro");

// Saves the subset of the Avro records read in
df.filter($"age > 5").write()
    .format("com.databricks.spark.avro")
    .save("/tmp/output");
请注意,对于Spark 1.2、1.3和1.4+,此连接器有不同的版本:

火花塞连接器
1.2 0.2.0
1.3 1.0.0
1.4+ 2.0.1

使用Maven:

<dependency>
    <groupId>com.databricks</groupId>
    <artifactId>spark-avro_2.10</artifactId>
    <version>{AVRO_CONNECTOR_VERSION}</version>
</dependency>

com.databricks

这里,假设K是您的键,V是您的值:

....

val job = new Job();

job.setInputFormatClass(AvroKeyValueInputFormat<K, V>.class);

FileInputFormat.addInputPaths(job, <inputPaths>);
AvroJob.setInputKeySchema(job, <keySchema>);
AvroJob.setInputValueSchema(job, <valueSchema>);

RDD<AvroKey<K>, AvroValue<V>> avroRDD = 
  sc.newAPIHadoopRDD(job.getConfiguration,
  AvroKeyValueInputFormat<<K>, <V>>,
  AvroKey<K>.class,
  AvroValue<V>.class);
。。。。
val job=新作业();
setInputFormatClass(AvroKeyValueInputFormat.class);
addInputPaths(作业,);
setInputKeySchema(作业,);
setInputValueSchema(作业,);
RDD avroRDD=
sc.newAPIHadoopRDD(job.getConfiguration,
AvroKeyValueInputFormat,
AvroKey.class,
AvroValue.class);

您能否分享更多有关您遇到的编译问题的信息?错误、堆栈跟踪等。它给出的编译错误表明,预期的java.lang.class实际值是AvroInputFormat.class,对于除path、hadoopConf之外的其他参数也是一样的。我哪里出错了,有什么帮助吗?谢谢你知道如何通过Hadoop InputFormat API在Java中实现吗?@Jordan-试试这个:@Jordan-我想:@leet_Falcon,谢谢,我已经用Avro尝试过Spark SQL,但目前为止运气不好。下面的错误消息是我在线程“main”java.lang.NoSuchMethodError中遇到的异常:org.apache.spark.sql.SQLContext.read()Lorg/apache/spark/sql/DataFrameReader;请访问org.opencb.hpg.bigdata.tools.sparkanalytics.SaprkSQLAvro.main(SaprkSQLAvro.java:19)。@kre-您是否使用Spark 1.4+?