scala - 加入与条件相同的最后一个字母的数据帧
问题描述
我有 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 **
连接条件如下:
mn
例如,如果实际代码存在于第二个数据帧中,那么我们加入。- 如果实际代码不在第二个数据帧中,那么我们检查第一个数据帧中的代码是否以 结尾
j
,如果是,那么我们加入 wherecde
等于*j
- 如果实际代码不以 OR 结尾,如果我们在相应的数据框中
j
找不到,那么我们加入*j
**
解决方案
目前尚不清楚您到底想做什么。但是如果你想在[列最后一个字符] = *[列最后一个字符]的条件下加入数据框,你可以使用substring
如下函数:
df1.join(df2, concat(lit("*"), substring(df1.col("code"),-1,1)) === df2.col("cde"))
推荐阅读
- windows - 如何在 powershell 中执行数学运算,或者更准确地说,从 .CSV 文件
- spring-integration - Spring Cloud Stream:如何为一组绑定指定单个消息处理程序?
- aurelia - 如何在 Aurelia-Dragula 中设置容器特定选项?
- symfony - 提交后如何仅获取更改的实体?
- c# - SQS 不能在 .Net 核心中仅发送 quations 消息
- c++ - CLOSE_WAIT 服务器进程被杀死并立即重生时出错
- android-studio - 选项设置“android.keepTimestampsInApk=true”是实验性的,不受支持
- node.js - 使用容器隔离子进程
- powershell - 如何通过多个管道传递对象/值?
- three.js - 如何移动顶点并保持顶点形成的面连接?