kam*_*emm 2 java arrays apache-spark apache-spark-sql
我有 2 个数据框 df1 和 df2。df1 有 1 个字符串类型的列键
df1.show() 钥匙 ---- k1 k2 k3 df2 有 2 列 df2.show() 主题 | 键 ------------- t1 | [k1,k2] t2 | [PK1,PK2]
当 df1.key 存在于 df2.keys 中时,我想加入 2 个数据帧。我看到之前发布的示例Spark:用数组连接数据框列
但是,我正在寻找整个单词匹配。Contains 方法连接具有部分匹配的行。我的意思是在上面的例子中,我不希望 k2 与 [pk1, pk2] 连接,因为数组不包含键 k2,它包含 pk2。
有人可以建议如何加入这种情况吗?请提供JAVA示例。
可以使用函数“array_contains”:
val df1 = List("k1", "k2", "k3").toDF("key")
val df2 = List(
("t1", Array("k1", "k2")),
("t2", Array("pk1", "pk2"))
).toDF("topic", "keys")
val result = df1.join(df2, expr("array_contains(keys,key)"))
result.show(false)
Run Code Online (Sandbox Code Playgroud)
输出:
+---+-----+--------+
|key|topic|keys |
+---+-----+--------+
|k1 |t1 |[k1, k2]|
|k2 |t1 |[k1, k2]|
+---+-----+--------+
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6340 次 |
| 最近记录: |