Spark 2.4.0 Avro Java - 无法解析方法 from_avro
Spark 2.4.0 Avro Java - cannot resolve method from_avro
我正在尝试 运行 来自包含 Avro 消息的 kafka 队列的火花流。
根据 https://spark.apache.org/docs/latest/sql-data-sources-avro.html 我应该能够使用 from_avro
将列值转换为 Dataset<Row>
。
但是,我无法编译该项目,因为它抱怨找不到 from_avro
。我可以看到在依赖项 package.class 中声明的方法。
如何在本地 Java 代码中使用 org.apache.spark.sql.avro
中的 from_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.xml:
<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
导入名称
您需要在 pom.xml 中包含 spark-sql-avro,可在
https://mvnrepository.com/artifact/org.apache.spark/spark-sql-avro_2.11/2.4.0-palantir.28-1-gdf34e2d
这是因为生成了 class 个名称,将其导入为 import org.apache.spark.sql.avro.package$;
然后使用 package$.MODULE$.from_avro(...)
应该可以工作
我正在尝试 运行 来自包含 Avro 消息的 kafka 队列的火花流。
根据 https://spark.apache.org/docs/latest/sql-data-sources-avro.html 我应该能够使用 from_avro
将列值转换为 Dataset<Row>
。
但是,我无法编译该项目,因为它抱怨找不到 from_avro
。我可以看到在依赖项 package.class 中声明的方法。
如何在本地 Java 代码中使用 org.apache.spark.sql.avro
中的 from_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.xml:
<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
您需要在 pom.xml 中包含 spark-sql-avro,可在
https://mvnrepository.com/artifact/org.apache.spark/spark-sql-avro_2.11/2.4.0-palantir.28-1-gdf34e2d
这是因为生成了 class 个名称,将其导入为 import org.apache.spark.sql.avro.package$;
然后使用 package$.MODULE$.from_avro(...)
应该可以工作