如何在 Pyspark 中查找列值在另一列中的结束位置?



我有一种情况,我需要在另一列的基础上从一列提取一些信息。这张桌子太大了。它有近50列和7000万条记录。附上下面的截图来解释情况。

id     idkey            ValuesNeededInAnotherColumn
-----  ---------------  ---------------------------
123  10012300152                              152
12340  100001234001400                         1400
12  20123152                                3152
253  5000253

所以表有一个列idkey。Idkey由一些值组成,如companycode(100)+id(123)+custcode(00152) = 10012300152。公司代码和id的长度不固定。它们的长度可以变化,但是数据的位置是固定的,所以idkey中id后面的值总是固定的。如果idkey中id值之后没有任何内容,则表示custcode为空。我试图实现的解决方案是在idkey列中找到id列的位置,然后将值子串直到结束并将其转换为int。这个解决方案花费了太多的时间,因为我必须将数据帧转换为rdd,因为不可能直接在数据帧上进行转换。

任何人有一个优化的解决方案,可以实现相当大的表,那么请帮助。

我会担心歧义。例如:

id     idkey            ValuesNeededInAnotherColumn
-----  ---------------  ---------------------------
12  120123012            123012 or 3012 or null?

不考虑这些,regexp_extract函数的使用相对简单。

SELECT id, idkey,
cast(regexp_extract(idkey, concat(id, '(.*)'), 1) as int) as ValuesNeededInAnotherColumn
FROM df;

相关内容

  • 没有找到相关文章

最新更新