如何正确地向Google Dataproc提交kafka流式pyspark工作

时间:2018-03-11 19:03:31

标签: python pyspark google-cloud-platform google-cloud-dataproc

我正在尝试通过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

找到套餐

完整追踪:https://pastebin.com/Uz3iGy2N

1 个答案:

答案 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