示例:我有一个带字符串的列。我需要把它转换成一个元组或数组。主要的挑战是我需要整数的键和双精度的值。数组<int,double>。如果有人能给我一个想法或建议就好了?
neskvpey1#
基于问题中提供的字符串,所需的输出需要是 Array[(Int, Double)] 输入数据:
Array[(Int, Double)]
import org.apache.spark.sql.SparkSession val values = List("1:1.10, 2:2.20, 3:3.30") val spark = SparkSession.builder().master("local").getOrCreate() import spark.implicits._ val df = values.toDF()
创建自定义项:
def parse_values(value: String) = { val values = value.split(",").map(_.trim) values.foldLeft(Array[(Int, Double)]()){ case (acc, present) => val Array(k, v) = present.split(",")(0).split(":") acc :+ (k.trim.toInt, v.trim.toDouble) } } val parse_values_udf = udf(parse_values _)
使用自定义项:
df.withColumn("parse_value", parse_values_udf(col("value")))
输出验证:
scala> df.withColumn("parse_value", parse_values_udf(col("value"))).show(false) +----------------------+------------------------------+ |value |parse_value | +----------------------+------------------------------+ |1:1.10, 2:2.20, 3:3.30|[[1, 1.1], [2, 2.2], [3, 3.3]]| +----------------------+------------------------------+ scala> df.withColumn("parse_value", parse_values_udf(col("value"))).schema res22: org.apache.spark.sql.types.StructType = StructType(StructField(value,StringType,true), StructField(parse_value,ArrayType(StructType(StructField(_1,IntegerType,false), StructFi eld(_2,DoubleType,false)),true),true))
1条答案
按热度按时间neskvpey1#
基于问题中提供的字符串,所需的输出需要是
Array[(Int, Double)]
输入数据:创建自定义项:
使用自定义项:
输出验证: