PySpark无UDF提取array<string>列所有元素点号前内容
实现方法
你可以直接使用Spark内置的数组高阶函数transform完成需求,全程不需要定义UDF,性能远高于UDF实现,适配Spark 2.4及以上版本。
核心逻辑
transform函数可以直接遍历数组类型列的每一个元素,对每个元素应用你已经写好的substring_index提取逻辑,最终返回长度和原数组一致的处理后新数组。
实现代码
from pyspark.sql import functions as F df = df.withColumn( "address", F.expr("transform(all_addresses, elem -> substring_index(elem, '.', 1))") )
效果说明
处理后对应示例数据的返回结果如下:
- 原数组
["test.a" "random.ac"]处理后得到["test", "random"] - 原数组
["test.41" "random.23" "test.123"]处理后得到["test", "random", "test"]
如果数组内存在不含.的字符串,substring_index会直接返回原字符串,不会抛出异常。
内容的提问来源于stack exchange,提问作者bakun
相关产品推荐
相关产品推荐

