我正在尝试通过Dataproc UI提交pyspark作业并继续收到错误,看起来它没有加载kafka流媒体包。
以下是我的工作中UI提供的REST命令:
POST /v1/projects/projectname/regions/global/jobs:submit/
{
"projectId": "projectname",
"job": {
"placement": {
"clusterName": "cluster-main"
},
"reference": {
"jobId": "job-33ab811a"
},
"pysparkJob": {
"mainPythonFileUri": "gs://projectname/streaming.py",
"args": [
"--packages org.apache.spark:spark-sql-kafka-0-10_2.11:2.2.0"
],
"jarFileUris": [
"gs://projectname/spark-streaming-kafka-0-10_2.11-2.2.0.jar"
]
}
}
}
我试图将kafka包作为args和jar文件传递。
这是我的代码(streaming.py
):
from pyspark import SparkContext
from pyspark.sql import SparkSession
from pyspark.streaming import StreamingContext
from pyspark.streaming.kafka import KafkaUtils
import json
sc = SparkContext()
spark = SparkSession.builder.master("local").appName("Spark-Kafka-Integration").getOrCreate()
# < ip > is masked
df = spark \
.readStream \
.format("kafka") \
.option("kafka.bootstrap.servers", "<ip>:9092") \
.option("subscribe", "rsvps") \
.option("startingOffsets", "earliest") \
.load()
df.printSchema()
错误: :java.lang.ClassNotFoundException:无法找到数据源:kafka。请在http://spark.apache.org/third-party-projects.html
找到套餐答案 0 :(得分:3)
你可能会遇到这样的问题,其中“ - packages”是spark-submit
中的语法糖,当高级工具(Dataproc)以编程方式调用Spark提交时,它会以非常方式进行交互,并使用其他语法描述我的回复:use an external library in pyspark job in a Spark cluster from google-dataproc
简而言之,您可以使用properties
在Dataproc请求中指定等效的spark.jars.packages=org.apache.spark:spark-sql-kafka-0-10_2.11:2.2.0
,而不是在作业参数中传递--properties
。