我有两个数据框(删除与问题无关的字段):
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
,但如果有一种有效的方式来执行上述连接,我不想这样做。
答案 0 :(得分:1)
您可以直接使用加入两个数据框时的条件
让我举一个例子来说明。我创建了两个与你提到的相同的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)&gt; = startLong(df2)AND&lt; = 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 |
+--------+---------+-------+