Scala如何将DataFrame逗号分隔数字字符串列转为Double数组
实现方案
以下两种主流Spark API的实现都可以1行完成转换,性能远高于自定义UDF:
- PySpark (Spark 2.3及以上版本支持)
from pyspark.sql import functions as F df = df.withColumn("MyCol", F.split(F.trim(F.col("MyCol")), ",\\s*").cast("array<double>"))
- Scala Spark
import org.apache.spark.sql.functions._ val newDf = df.withColumn("MyCol", split(trim(col("MyCol")), ",\\s*").cast("array<double>"))
代码说明
- 先用
trim清理字符串首尾的多余空白字符 - 按「逗号+任意数量空格」规则拆分字符串,得到
array<string>类型的列 - 直接批量将字符串数组强转为
array<double>,自动匹配你需要的Schema格式
如果你的数据中存在不符合Double格式的异常值,可将cast替换为Spark 3.0+支持的try_cast,异常值会自动转为null,不会打断任务执行。
内容的提问来源于stack exchange,提问作者Vikrant Bhalerao
相关产品推荐
相关产品推荐

