Spark 2.2.0 是不是支持 Streaming Self-Join?

Posted

技术标签:

【中文标题】Spark 2.2.0 是不是支持 Streaming Self-Join?【英文标题】:Does Spark 2.2.0 support Streaming Self-Joins?Spark 2.2.0 是否支持 Streaming Self-Join? 【发布时间】:2018-02-18 13:13:11 【问题描述】:

我了解 Spark 2.2.0 不支持两个不同数据帧的 JOINS,但我正在尝试进行自连接,因此只有一个流。下面是我的代码

val jdf = spark
    .readStream
    .format("kafka")
    .option("kafka.bootstrap.servers", "localhost:9092")
    .option("subscribe", "join_test")
    .option("startingOffsets", "earliest")
    .load();

jdf.printSchema

打印以下内容

root
 |-- key: binary (nullable = true)
 |-- value: binary (nullable = true)
 |-- topic: string (nullable = true)
 |-- partition: integer (nullable = true)
 |-- offset: long (nullable = true)
 |-- timestamp: timestamp (nullable = true)
 |-- timestampType: integer (nullable = true)

现在我在阅读完这个 SO post 后运行下面的连接查询

jdf.as("jdf1").join(jdf.as("jdf2"), $"jdf1.key" === $"jdf2.key")

我得到以下异常

org.apache.spark.sql.AnalysisException: cannot resolve '`jdf1.key`' given input columns: [timestamp, value, partition, timestampType, topic, offset, key];;
'Join Inner, ('jdf1.key = 'jdf2.key)
:- SubqueryAlias jdf1
:  +- StreamingRelation DataSource(org.apache.spark.sql.SparkSession@f662b5,kafka,List(),None,List(),None,Map(startingOffsets -> earliest, subscribe -> join_test, kafka.bootstrap.servers -> localhost:9092),None), kafka, [key#243, value#244, topic#245, partition#246, offset#247L, timestamp#248, timestampType#249]
+- SubqueryAlias jdf2
   +- StreamingRelation DataSource(org.apache.spark.sql.SparkSession@f662b5,kafka,List(),None,List(),None,Map(startingOffsets -> earliest, subscribe -> join_test, kafka.bootstrap.servers -> localhost:9092),None), kafka, [key#243, value#244, topic#245, partition#246, offset#247L, timestamp#248, timestampType#249]

【问题讨论】:

【参考方案1】:

我认为如果我们尝试加入相同的流数据帧或不同的数据帧,它不会产生任何差异。所以,它不会被支持。

有两种方法可以实现。

首先,您可以加入静态和流式数据帧。因此,读取一次作为批处理数据,然后读取一次作为流式 df。 第二种解决方案,您可以使用 Kafka 流。它提供了流数据的连接。

【讨论】:

您可能是对的,但错误说明了其他内容。它说无法解析“jdf1.key”。不是说不支持JOINS! 它可能对你有帮助,***.com/questions/46412884/… 知道了!但我很想看到 UnsupportedOperationException ......相反,我在上面的代码中看到了其他内容。

以上是关于Spark 2.2.0 是不是支持 Streaming Self-Join?的主要内容,如果未能解决你的问题,请参考以下文章

Offset Management For Apache Kafka With Apache Spark Streaming

Apache Spark 2.2.0 中文文档 - Submitting Applications | ApacheCN

Spark 2.2.0 数据集中的输出格式不可读

Spark 是不是支持插入覆盖静态分区?

Spark 是不是支持从句?

Spark是不是支持melt和dcast [重复]