java.lang.ClassNotFoundException:找不到数据源:hudi。请在 http://spark.apache.org/third-party-projects.html 找到软件包

rad*_*rma 5 apache-spark google-cloud-dataproc apache-hudi

我正在尝试从 hudi 读取数据,但出现以下错误

Caused by: java.lang.ClassNotFoundException: Failed to find data source: hudi. Please find packages at http://spark.apache.org/third-party-projects.html
Run Code Online (Sandbox Code Playgroud)

我可以使用以下命令使用我的 jupyter 笔记本从 Hudi 读取数据

import org.apache.spark.sql.SparkSession
val spark = SparkSession.builder.config(
    "spark.sql.catalogImplementation", "hive"
).config(
    "spark.serializer", "org.apache.spark.serializer.KryoSerializer"
).enableHiveSupport().getOrCreate




import org.apache.hudi.DataSourceReadOptions
val hudiIncQueryDF = spark.read.format("hudi").load(
    "path"
)

import org.apache.spark.sql.functions._
hudiIncQueryDF.filter(col("column_name")===lit("2022-06-01")).show(10,false)
Run Code Online (Sandbox Code Playgroud)

此 jupyter 笔记本是使用使用以下属性之一创建的集群打开的

--properties spark:spark.jars="gs://rdl-stage-lib/hudi-spark3-bundle_2.12-0.10.0.jar" \
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用同一集群的 Spark-Submit 运行作业时,出现上述错误。我还在我的作业属性中添加了spark.serializer=org.apache.spark.serializer.KryoSerializer。不确定是什么问题。

小智 0

由于您的应用程序依赖于 hudi jar,hudi 本身也有一些依赖项,当您将 maven 包添加到会话中时,spark 将安装 hudi jar 及其依赖项,但在您的情况下,您仅提供来自 GCS 存储桶的 hudi jar 文件。

您可以尝试使用此属性:

--properties spark:spark.jars.packages="org.apache.hudi:hudi-spark3.3-bundle_2.12:0.12.0" \
Run Code Online (Sandbox Code Playgroud)

或者直接从你的笔记本中:

import org.apache.spark.sql.SparkSession

val spark = SparkSession.builder.config(
    "spark.sql.catalogImplementation", "hive"
).config(
    "spark.serializer", "org.apache.spark.serializer.KryoSerializer"
).config(
    "spark.sql.catalog.spark_catalog", "org.apache.spark.sql.hudi.catalog.HoodieCatalog"
).config(
    "spark.sql.extensions", "org.apache.spark.sql.hudi.HoodieSparkSessionExtension"
).config(
    "spark.jars.package", "org.apache.hudi:hudi-spark3.3-bundle_2.12:0.12.0"
).enableHiveSupport().getOrCreate
Run Code Online (Sandbox Code Playgroud)