当前位置:  开发笔记 > 数据库 > 正文

Spark:将dataframe列与数组连接

如何解决《Spark:将dataframe列与数组连接》经验,为你挑选了1个好方法。

我有两个带有两列的DataFrame

df1 与模式 (key1:Long, Value)

df2 与模式 (key2:Array[Long], Value)

我需要将这些DataFrame加入键列(在key1和之间找到匹配的值key2)。但是问题在于它们的类型不同。有没有办法做到这一点?



1> 小智..:

做到这一点的最佳方法(并且不需要任何数据帧的转换或分解)是使用array_containsspark 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直接使用该函数,因为它要求第二个参数是文字,而不是列表达式。

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有