我有一种情况,我需要在另一列的基础上从一列提取一些信息。这张桌子太大了。它有近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;