我试图在我的 Cloudera上使用 Juputer笔记本( PySpark 内核)运行示例 Spark Structured Streaming 应用程序。 strong>集群,但是看来我无法使用所需的软件包。
dsraw = spark \
.readStream \
.format("kafka") \
.option("kafka.bootstrap.servers", "kafkaBroker:9092") \
.option("subscribe", "test") \
.option("startingOffsets", "earliest") \
.load()
我得到的错误:
Py4JJavaError: An error occurred while calling o113.load.
: org.apache.spark.sql.AnalysisException: Failed to find data source: kafka. Please deploy the application as per the deployment section of "Structured Streaming + Kafka Integration Guide".;
我的设置:
火花版本:“ 2.4.0.cloudera2”
Scala版本:2.11.12
Kafka版本:2.1.0-kafka-4.0.0
我的尝试:
1)编辑kernel.json
"PYSPARK_SUBMIT_ARGS": " --packages org.apache.spark:spark-sql-kafka-0-10_2.11:2.4.0 --master yarn --deploy-mode client pyspark-shell"
2)在代码中传递环境变量
import os
os.environ['PYSPARK_SUBMIT_ARGS'] = '--packages org.apache.spark:spark-sql-kafka-0-10_2.11:2.4.0 pyspark-shell'
当我从命令行运行pyspark时,它似乎可以工作,但是在尝试查询流时却遇到了其他问题(无论如何,我都需要从Jupyter使其工作)
pyspark --packages org.apache.spark:spark-sql-kafka-0-10_2.11:2.4.0
我熟悉integration guide,但是就我而言,这似乎还不够。
我也在尝试使用不同版本的软件包,也尝试将其作为jar传递。您有什么想法可能有问题吗?是Cloudera发行版还是Jupyter特有的问题?
答案 0 :(得分:0)
晚安朋友,我有一个和你类似的问题......但是我解决了这个步骤的包:
pyspark --packages org.apache.spark:spark-sql-kafka-0-10_2.12:3.0.1
这是由于 spark/pyspark 的版本,所以我设法让 readStream 工作。
我现在的问题是我无法使用注册表模式写入或打印 data.values,您能继续这样做吗?如果可以,它会很有帮助。
我的代码示例:
schemaRegistryUrl = "http://localhost:8081"
df = spark \
.readStream \
.format("kafka") \
.option("kafka.bootstrap.servers", "localhost:9092") \
.option("startingOffsets", "earliest") \
.option("subscribe", "topic-a") \
.load() \
.select(from_avro(col("value"), schemaRegistryUrl).alias("values"))