我有两个带有两列的DataFrame
df1
与模式 (key1:Long, Value)
df2
与模式 (key2:Array[Long], Value)
我需要将这些DataFrame加入键列(在key1
和之间找到匹配的值key2
)。但是问题在于它们的类型不同。有没有办法做到这一点?
做到这一点的最佳方法(并且不需要任何数据帧的转换或分解)是使用array_contains
spark sql表达式,如下所示。
import org.apache.spark.sql.functions.expr import spark.implicits._ val df1 = Seq((1L,"one.df1"), (2L,"two.df1"),(3L,"three.df1")).toDF("key1","Value") val df2 = Seq((Array(1L,1L),"one.df2"), (Array(2L,2L),"two.df2"), (Array(3L,3L),"three.df2")).toDF("key2","Value") val joinedRDD = df1.join(df2, expr("array_contains(key2, key1)")).show +----+---------+------+---------+ |key1| Value| key2| Value| +----+---------+------+---------+ | 1| one.df1|[1, 1]| one.df2| | 2| two.df1|[2, 2]| two.df2| | 3|three.df1|[3, 3]|three.df2| +----+---------+------+---------+
请注意,您不能org.apache.spark.sql.functions.array_contains
直接使用该函数,因为它要求第二个参数是文字,而不是列表达式。