Spark 结构化流中的外部连接

Posted

技术标签:

【中文标题】Spark 结构化流中的外部连接【英文标题】:Outer Joins in Spark Structured Streaming 【发布时间】:2018-01-25 19:46:58 【问题描述】:

有没有办法在 Spark Structured Streaming 中执行 outer_join(特别是左外连接)?我注意到这个JIRA #22053 可以为流数据集启用内部连接(而且效果很好!)。我想知道outer_join 是否也有类似的东西。 我尝试使用 JIRA 中的相同逻辑进行外部连接,但无法获得正确的输出。谢谢!

【问题讨论】:

我们尝试过同样的事情。在 Databricks 技术支持的帮助下,我们成功地从左到右工作。外部对我们来说仍然难以捉摸。这是针对 Spark 版本 2.3 标记为已解决的 jira 票证:issues.apache.org/jira/browse/SPARK-22136 嗨 - 当你说左时,你的意思是左外连接吗?请问你能提供一个带左连接的样品吗?我已经开始工作了。 Left 不适合我。 Spark 2.3 Stream-Stream 左外连接!我目前已经在 databricks 集群上进行了测试。 gist.github.com/jmwilli25/8d482c733196ffcb7850e300be56383d 外连接有3种:左、右、全。你在说什么?你有什么问题? minimal reproducible example。通过帖子编辑进行澄清,而不是 cmets。 【参考方案1】:

我能够让流-流内连接和外连接工作。这是我拥有的一些示例代码。希望对您有所帮助!

流-流加入(JIRA Spark-22053 & JIRA Spark-22136):

streamA.join(streamB, expr("streamA_ID = streamB_ID AND timeA BETWEEN timeB - INTERVAL 15 minutes and timeB"), joinType="joinType")

joinType 可以是“inner”、“leftOuter”或“rightOuter”。

您可以在将与 Spark 2.3 版本一起发布的文章中找到更多信息:https://spark.apache.org/docs/latest/structured-streaming-programming-guide.html#stream-stream-joins

【讨论】:

您好,我也尝试使用流加入 spark 2.3,但一段时间后我摆脱了内存错误,关于这个问题 SPARK-23682 有一个开放的 Jira。你遇到过这个错误吗?您是否正在运行来自 Kafka 主题的结构化流式连接?【参考方案2】:

Apache 2.3.0 将支持流-流连接。以下是2.3.0 RC2的文档:https://dist.apache.org/repos/dist/dev/spark/v2.3.0-rc2-docs/_site/structured-streaming-programming-guide.html#stream-stream-joins

【讨论】:

嗨!首先,在流式连接方面做得很好!我可以知道支持更新模式需要多少工作?它甚至计划用于 2.4 吗?我没有看到任何与此相关的票?因为目前如果我在外部连接的情况下没有错,用户必须等待结果,直到水印时间过去,这通常可能是数小时或数天(在我的情况下)。很高兴在任何给定时间看到部分连接,所以它更实时! 我在想是否应该通过分叉火花代码自己添加更新模式。所以我只想知道这需要多少工作量?

以上是关于Spark 结构化流中的外部连接的主要内容,如果未能解决你的问题,请参考以下文章

在 Spark 结构化流中,我如何将完整的聚合输出到外部源,如 REST 服务

SPARK 结构化流中的 StructField 是不是存在错误

Spark 结构化流中的临时视图

带有自定义接收器的 Spark 结构化流中的输入行数

有没有办法将生成的 groupby 流加入到 kafka-spark 结构化流中的原始流?

使 Spark 结构化流中的 JSON 可以在 python (pyspark) 中作为没有 RDD 的数据帧访问