Spark结构化流-无法解析“ Kafka”格式(Cloudera群集上的Jupyter笔记本)

时间:2019-07-15 15:13:27

标签: pyspark apache-kafka jupyter-notebook cloudera spark-structured-streaming

我试图在我的 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特有的问题?

1 个答案:

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