Spark DataFrame(Java API 2.2)如何获取列子串并传入列字符串长度?
解决Spark Java API 2.2中列子串截取的问题
嘿,我来帮你搞定这个Spark Java API 2.2里的子串截取问题!
你的需求是从NODE_ID列的第2个字符开始截取到字符串末尾,其实有两种简洁的实现方式:
方式一:直接截取到末尾(推荐)
Spark的Column类提供了单参数的substr方法,只要传入起始位置(注意Spark是1-based索引,也就是第2个字符对应索引2),就会自动截取从该位置到字符串末尾的部分,完全不用计算长度,代码更清爽:
// 从第2个字符开始截取到末尾 aggregationsDS = aggregationsDS.withColumn("NODE_ID", aggregationsDS.col("NODE_ID").substr(2));
方式二:通过length函数指定长度
如果因为特殊需求你一定要传入长度参数,那可以用org.apache.spark.sql.functions中的length函数获取列的字符串长度,把它作为substr的第二个参数。记得先导入length方法:
import static org.apache.spark.sql.functions.length; // 用length函数获取列的长度,作为substr的长度参数 aggregationsDS = aggregationsDS.withColumn("NODE_ID", aggregationsDS.col("NODE_ID").substr(2, length(aggregationsDS.col("NODE_ID"))));
这里再提醒下:Spark的字符串索引是1-based的,和Java原生字符串的0-based索引不一样,别搞混啦!
内容的提问来源于stack exchange,提问作者Alice
相关产品推荐
相关产品推荐

