Spark 2.4.0 Avro Java - 无法解析方法from_avro
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark 2.4.0 Avro Java - 无法解析方法from_avro相关的知识,希望对你有一定的参考价值。
我正在尝试从包含Avro消息的kafka队列运行spark流。
根据https://spark.apache.org/docs/latest/sql-data-sources-avro.html,我应该能够使用from_avro
将列值转换为Dataset<Row>
。
但是,我无法编译项目,因为它抱怨from_avro
无法找到。我可以看到在依赖的package.class中声明的方法 - 参见附件截图。
如何在我的Java代码本地使用from_avro
中的org.apache.spark.sql.avro
方法?
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;
import static org.apache.spark.sql.functions.*;
import org.apache.spark.sql.avro.*;
public class AvroStreamTest {
public static void main(String[] args) throws IOException, InterruptedException {
// Creating local sparkSession here...
Dataset<Row> df = sparkSession
.readStream()
.format("kafka")
.option("kafka.bootstrap.servers", "host:port")
.option("subscribe", "avro_queue")
.load();
// Cannot resolve method 'from_avro'...
df.select(from_avro(col("value"), jsonFormatSchema)).writeStream().format("console")
.outputMode("update")
.start();
}
}
pom.hml:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-avro_2.11</artifactId>
<version>2.4.0</version>
</dependency>
<!-- more dependencies below -->
</dependencies>
看起来Java无法从sql.avro.package.class
导入名称
这是因为生成的类名,将其导入import org.apache.spark.sql.avro.package$;
然后使用package$.MODULE$.from_avro(...)
应该工作
您需要在pom.xml中包含spark-sql-avro,该文件位于
https://mvnrepository.com/artifact/org.apache.spark/spark-sql-avro_2.11/2.4.0-palantir.28-1-gdf34e2d
以上是关于Spark 2.4.0 Avro Java - 无法解析方法from_avro的主要内容,如果未能解决你的问题,请参考以下文章
java.lang.NoClassDefFoundError: com/databricks/spark/avro/package$
0016-Avro序列化&反序列化和Spark读取Avro数据
使用 pyspark 在 Jupyter notebook 中读取 avro 文件时遇到问题
使用 Java 将 Json 对象转换为 Parquet 格式而不转换为 AVRO(不使用 Spark、Hive、Pig、Impala)