首页 > 解决方案 > 加入与条件相同的最后一个字母的数据帧

问题描述

我有 2 个要加入的数据框。

product_no  code
12          aj
12          mn
13          aj

p_no       cde
12         *j
12         mn
13         *j

Result
product_no  code    p_no       cde
12          aj      12         *j
12          mn      12         mn
13          aj      12         *j

我想匹配所有以j*j如何做到这一点结尾的代码?我知道我必须加入 where product_no === p_no,但是如果代码的最后一个字母是 j ,我如何加入 where ,然后加入 by *j

编辑

我们目前正在加入product_no,需要以适当的方式将第一个数据帧中的代码加入第二个数据帧中的代码。

第二个数据框的数据只包含code列的3个值:2 letters, *j, or **连接条件如下:

  1. mn例如,如果实际代码存在于第二个数据帧中,那么我们加入。
  2. 如果实际代码不在第二个数据帧中,那么我们检查第一个数据帧中的代码是否以 结尾j,如果是,那么我们加入 wherecde等于*j
  3. 如果实际代码不以 OR 结尾,如果我们在相应的数据框中j找不到,那么我们加入*j**

标签: scalaapache-spark

解决方案


目前尚不清楚您到底想做什么。但是如果你想在[列最后一个字符] = *[列最后一个字符]的条件下加入数据框,你可以使用substring如下函数:

df1.join(df2, concat(lit("*"), substring(df1.col("code"),-1,1)) === df2.col("cde"))

推荐阅读