Apache spark Jupyter笔记本上未显示结构化流式输出

Apache spark Jupyter笔记本上未显示结构化流式输出,apache-spark,pyspark,jupyter-notebook,spark-streaming,spark-structured-streaming,Apache Spark,Pyspark,Jupyter Notebook,Spark Streaming,Spark Structured Streaming,我有两本笔记本。第一个笔记本是使用tweepy从twitter上读取推文并将其写入套接字。另一个笔记本是使用spark structured streaming(Python)从该套接字读取推文,并将结果写入控制台。不幸的是,我在jupyter控制台上没有得到输出。代码在pycharm上运行良好 spark = SparkSession \ .builder \ .appName("StructuredStreaming") \ .getOrCreate() spark.

我有两本笔记本。第一个笔记本是使用tweepy从twitter上读取推文并将其写入套接字。另一个笔记本是使用spark structured streaming(Python)从该套接字读取推文,并将结果写入控制台。不幸的是,我在jupyter控制台上没有得到输出。代码在pycharm上运行良好

spark = SparkSession \
    .builder \
    .appName("StructuredStreaming") \
    .getOrCreate()
spark.sparkContext.setLogLevel("ERROR")

# This is Spark Structured Streaming Code which is reading streams from twitter and showing them on console.
tweets = spark \
    .readStream \
    .format("socket") \
    .option("host", "127.0.0.1") \
    .option("port", 7000) \
    .load()

query = tweets \
    .writeStream \
    .option("truncate", "false") \
    .outputMode("append") \
    .format("console") \
    .start()

query.awaitTermination()

我不确定Jupyter笔记本是否能做到这一点。但是,您可以使用内存输出来实现类似的结果。这在
complete
模式下很简单,但可能需要对
append
进行一些更改

对于
完成
模式 在
complete
输出模式下,您的查询应大致如下所示:

query = tweets \
    .writeStream \
    .outputMode("complete") \
    .format("memory") \
    .queryName("your_query_name") \
    .start()
请注意,末尾没有
query.awaitTermination()
。 现在,在另一个单元格中查询
your\u query\u name
temp表,并随时观察不断更新的结果:

from IPython.display import display, clear_output

while True:
    clear_output(wait=True)
    display(query.status)
    display(spark.sql('SELECT * FROM your_query_name').show())
    sleep(1)
对于
追加
模式 如果要使用
append
输出模式,则必须使用水印。您也将无法使用聚合,因此您的代码可能需要进一步更改

query = tweets \
    .withWatermark("timestampColumn", "3 minutes")
    .writeStream \
    .outputMode("append") \
    .format("memory") \
    .queryName("your_query_name") \
    .start()
显示代码保持不变。 您还可以以类似的方式显示
query.lastProgress
,以获取更详细的信息

启示与借鉴

您正在从twitter或socket读取数据吗?正如您的评论所说,阅读twitter。我正在从套接字读取数据。一个笔记本正在从twitter读取推文并将其写入套接字,另一个笔记本正在使用结构化流媒体从该套接字读取推文。