Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark Jupyter笔记本中的Spark流媒体终端_Apache Spark_Pyspark_Spark Streaming - Fatal编程技术网

Apache spark Jupyter笔记本中的Spark流媒体终端

Apache spark Jupyter笔记本中的Spark流媒体终端,apache-spark,pyspark,spark-streaming,Apache Spark,Pyspark,Spark Streaming,下面是ApacheSpark权威指南中的代码。我遇到了一个问题,当我有注释的代码行时,以下代码没有在Jupyter笔记本中打印结果,等待终止。 由于代码中包含了延迟终止,Jupyter内核很忙,并且可能会无限期地长时间保持忙碌 没有终止,代码工作正常 有人能解释一下这种行为吗。我怎样才能克服这个问题 static = spark.read.json(r"/resources/activity-data/") dataSchema = static.schema streaming = (spar

下面是ApacheSpark权威指南中的代码。我遇到了一个问题,当我有注释的代码行时,以下代码没有在Jupyter笔记本中打印结果,等待终止。 由于代码中包含了延迟终止,Jupyter内核很忙,并且可能会无限期地长时间保持忙碌

没有终止,代码工作正常

有人能解释一下这种行为吗。我怎样才能克服这个问题

static = spark.read.json(r"/resources/activity-data/")
dataSchema = static.schema
streaming = (spark
             .readStream
             .schema(dataSchema)
             .option("maxFilesPerTrigger", 1)
             .json(r"/resources/activity-data/")
            )
activityCounts = streaming.groupBy("gt").count()
spark.conf.set("spark.sql.shuffle.partitions", 5)
activityQuery = (activityCounts
                 .writeStream
                 .queryName("activity_counts")
                 .format("memory")
                 .outputMode("complete")
                 .start()
                )
#activityQuery.awaitTermination()
#activityQuery.stop()
from time import sleep
for x in range(5):
    spark.table("activity_counts").show()
    sleep(1)

对,;请参阅本文档作为参考,Spark TDG的第352页也对此进行了解释

Spark Streaming作业是连续应用程序,需要在生产活动中查询。因为它可以防止驱动程序进程在流在后台处于活动状态时终止

如果驱动程序被终止,那么应用程序也因此被终止,因此activityQuery.WaitTermination有点像故障保护。如果要关闭Jupyter中的流,可以运行activityQuery.stop重置查询以进行测试。。。我希望这有帮助

activityDataSample = 'path/to/data'
spark.conf.set("spark.sql.shuffle.partitions", 8)
static = spark.read.json(activityDataSample)
dataSchema = static.schema
static.printSchema()

streaming = spark.readStream.schema(dataSchema).option("maxFilesPerTrigger", 1)\
.json(activityDataSample)

activityCounts = streaming.groupBy("gt").count()

activityQuery = activityCounts.writeStream.queryName("activity_counts")\
.format("memory").outputMode("complete")\
.start()

# simulates a continuous stream for testing (cntrl-C to kill app)
'''
activityQuery = activityCounts.writeStream.queryName("activity_counts")\
.format("console").outputMode("complete")\
.start()
activityQuery.awaitTermination()
'''

spark.streams.active # query stream is active
[<pyspark.sql.streaming.StreamingQuery at 0x28a4308d320>]

from time import sleep
for x in range(3):
    spark.sql("select * from activity_counts").show(3)
    sleep(2)
+---+-----+
| gt|count|
+---+-----+
+---+-----+

+--------+-----+
|      gt|count|
+--------+-----+
|    bike|10796|
|    null|10449|
|stairsup|10452|
+--------+-----+
only showing top 3 rows

+--------+-----+
|      gt|count|
+--------+-----+
|    bike|10796|
|    null|10449|
|stairsup|10452|
+--------+-----+
only showing top 3 rows

activityQuery.stop() # stop query stream
spark.streams.active # no active streams anymore
[]

添加了activityQuery.stop,就在activityQuery.wait终止之后,但内核很长一段时间都处于忙碌状态。我能浏览数据的唯一方法是在中断内核之后。所以您使用的是内存模式,它只用于调试/测试,就像控制台模式一样。您永远不会在生产环境中使用它。如果切换到控制台模式,则可以在终端中查看小批量结果以进行测试。为了便于学习,您的代码很好,我在回复中添加了一些代码以进行确认。这回答了你的问题吗?那么总结是什么?使用此选项,dataframe.show将不会在Jupyter笔记本中打印数据帧。是否在笔记本上运行此操作?如果是这样的话,那么你就不会缩放任何东西。。。它只是在你机器上的内存中运行。总结是spark streaming作业被设计为连续应用程序,这一点也有助于实现。我不是一个专家,但我记得我认为这个主题也很混乱-这篇文档很有帮助-我所知道的唯一一个与Spark流媒体应用程序实现可靠集成的笔记本是Databricks。Jupyter不是用来扩展/流式传输连续的分布式应用程序的。这篇文章可能会有所帮助=>