Spark SCALA - 连接两个数据帧,其中一个数据帧中的连接值位于第二个数据帧中的两个字段之间

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark SCALA - 连接两个数据帧,其中一个数据帧中的连接值位于第二个数据帧中的两个字段之间相关的知识,希望对你有一定的参考价值。

我有两个数据帧(删除与问题无关的字段):

df1: org.apache.spark.sql.DataFrame = [rawValue: bigint]
df2: org.apache.spark.sql.DataFrame = [startLong: bigint, endLong: bigint]

我现在想加入两个数据框,其中:

rawValue(df1) >= startLong(df2) AND <= endLong(df2)

任何人都可以推荐一种有效的方法吗?我想到的一个选项是flatmap df2,然后做一个直接的join,但如果有一种有效的方法来进行上述连接,我不想这样做。

答案

您可以直接使用加入两个数据帧时的条件

让我举一个例子来说明。我创造了两个与你提到的相同的dataframes

val df1 = Seq((2L), (5L), (15L), (9L)).toDF("rawValue")
//df1: org.apache.spark.sql.DataFrame = [rawValue: bigint]

val df2 = Seq((3L, 5L), (10L, 16L), (9L, 9L)).toDF("startLong", "endLong")
//df2: org.apache.spark.sql.DataFrame = [startLong: bigint, endLong: bigint]

我现在想要加入两个数据帧,其中rawValue(df1)> = startLong(df2)AND <= endLong(df2)

为此你可以使用条件

df1.join(df2, df1("rawValue") >= df2("startLong") && df1("rawValue") <= df2("endLong")).show(false)

哪个应该给你

+--------+---------+-------+
|rawValue|startLong|endLong|
+--------+---------+-------+
|5       |3        |5      |
|15      |10       |16     |
|9       |9        |9      |
+--------+---------+-------+

以上是关于Spark SCALA - 连接两个数据帧,其中一个数据帧中的连接值位于第二个数据帧中的两个字段之间的主要内容,如果未能解决你的问题,请参考以下文章

用于大型交叉连接的Spark scala分区数据框

在 Apache Spark (Scala) 上获取两个数据帧的差异

Spark:数据帧聚合(Scala)

在 spark scala 中为数据帧中的每个组采样不同数量的随机行

如何在 Scala 中连接两个数据帧并通过索引从数据帧中选择几列?

在 Spark 中连接两个数据帧