【发布时间】:2020-06-27 15:27:25
【问题描述】:
我正在尝试使用 kinesis 数据流和使用 spark 的数据块笔记本创建实时情绪分析模型。我注意到执行数据转换、构建模型、分析情绪以及将数据发送到数据库的代码块只运行一次,但我希望这些代码块持续运行,直到我决定停止执行。数据块中有没有办法让代码块连续运行,直到用户决定终止执行?
我尝试将我的笔记本作为作业运行,但处理 spark 流的代码块永远运行,并且不允许其他代码块完成 ETL 过程。
这是我如何设置火花流的问题吗?这是我如何设置它的代码:
kinesisDF = spark \
.readStream \
.format("kinesis") \
.option("streamName", kinesisStreamName)\
.option("region", kinesisRegion) \
.option("initialPosition", "latest") \
.option("format", "json") \
.option("awsAccessKey", awsAccessKeyId)\
.option("awsSecretKey", awsSecretKey) \
.option("inferSchema", "true") \
.load()
df = kinesisDF \
.writeStream \
.format("memory") \
.outputMode("append") \
.queryName("tweets") \
.start()
上面的代码块 (.start) 是当我尝试将笔记本作为作业运行并且不允许其他代码块执行时连续运行的代码块。附言我对 databricks 和 spark 很陌生
【问题讨论】:
-
我最近参加了 DB 课程,甚至在 CE 上也不是问题。使用另一个单元格或打开一个新选项卡。我觉得这个问题不容易理解。
-
@thebluephantom 对问题结构感到抱歉。处理 ETL 过程的其他代码位于同一笔记本的其他代码块中。问题是当 spark 流从 kinesis 数据流中获取更多数据时,它们不会连续运行。它们将运行一次并使用当前位于包含 spark 流的 df 中的数据快照来运行进程并发送到 dynamodb。这只是我运行笔记本的问题吗?
-
听起来很合理,其他人只运行一次
-
请显示该代码
标签: python apache-spark spark-streaming databricks amazon-kinesis