J'essaie de lire les messages de Kafka (version 10) avec spark et d'essayer de l'imprimer.
import spark.implicits._
val spark = SparkSession
.builder
.appName("StructuredNetworkWordCount")
.config("spark.master", "local")
.getOrCreate()
val ds1 = spark.readStream.format("kafka")
.option("kafka.bootstrap.servers", "localhost:9092")
.option("subscribe", "topicA") .load()
ds1.collect.foreach(println)
ds1.writeStream
.format("console")
.start()
ds1.printSchema()
obtenir une erreur Exception dans le fil "main"
org.Apache.spark.sql.AnalysisException: Requêtes avec des sources en streaming doit être exécuté avec writeStream.start () ;;
j'ai résolu le problème en utilisant le code suivant.
val df = session
.readStream
.format("kafka")
.option("kafka.bootstrap.servers", brokers)
.option("subscribe", "streamTest2")
.load();
val query = df.writeStream
.outputMode("append")
.format("console")
.start()
query.awaitTermination()
J'ai beaucoup lutté avec ce problème. J'ai essayé chacune des solutions suggérées sur divers blogs . Mais, dans mon cas, il existe peu d'instructions entre les appels à start () sur une requête et enfin, j'appelais enfin la fonction waitTerminate () qui cause ce problème.
S'il vous plaît essayez de cette façon, cela fonctionne parfaitement pour moi . Exemple de travail:
val query = df.writeStream
.outputMode("append")
.format("console")
.start().awaitTermination();
Si vous écrivez de cette manière, cela provoquera une exception/erreur:
val query = df.writeStream
.outputMode("append")
.format("console")
.start()
// some statement
// some statement
query.awaitTermination();
jettera une exception donnée et fermera votre pilote de streaming.
Veuillez supprimer les fonctions ds1.collect.foreach(println)
et ds1.printSchema()
, utiliser outputMode
et awaitAnyTermination
pour le traitement en arrière-plan. Attendre la fin de l'une des requêtes sur le spark.streams
associé
val spark = SparkSession
.builder
.appName("StructuredNetworkWordCount")
.config("spark.master", "local[*]")
.getOrCreate()
val ds1 = spark.readStream.format("kafka")
.option("kafka.bootstrap.servers", "localhost:9092")
.option("subscribe", "topicA") .load()
val consoleOutput1 = ds1.writeStream
.outputMode("update")
.format("console")
.start()
spark.streams.awaitAnyTermination()
|key|value|topic|partition|offset|
+---+-----+-----+---------+------+
+---+-----+-----+---------+------+