连接条件与最后一个字母相同的数据框

时间:2018-11-08 04:52:57

标签: scala apache-spark

我有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匹配?我知道我必须在product_no === p_no处加入,但是如果代码的最后一个字母是j,然后如何在*j处加入,我该如何加入?

编辑

我们当前正在以product_no的身份加入,并且需要以适当的方式将第一个数据帧中的代码与第二个数据帧中的代码连接。

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

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

1 个答案:

答案 0 :(得分:0)

目前尚不清楚您到底想做什么。但是,如果要在[第最后一个字符] = * [最后一个字符]的条件下联接数据帧,则可以按如下方式使用substring函数:

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