假设在您的函数执行后,将出现一系列元素,例如以下示例:
val df = sc.parallelize(List(("Mike,1986,Toronto", 30), ("Andre,1980,Ottawa", 36), ("jill,1989,London", 27))).toDF("infoComb", "age")
df.show
+------------------+---+
| infoComb|age|
+------------------+---+
|Mike,1986,Toronto| 30|
| Andre,1980,Ottawa| 36|
| jill,1989,London| 27|
+------------------+---+
现在你可以用这个 infoComb 对象做的事情是,你可以开始拆分字符串,并使用以下代码获取更多列:
df.select(expr("(split(infoComb, ','))[0]").cast("string").as("name"), expr("(split(infoComb, ','))[1]").cast("integer").as("yearOfBorn"), expr("(split(infoComb, ','))[2]").cast("string").as("city"), $"age").show
+-----+----------+-------+---+
| name|yearOfBorn| city|age|
+-----+----------+-------+---+
|Mike| 1986|Toronto| 30|
|Andre| 1980| Ottawa| 36|
| jill| 1989| London| 27|
+-----+----------+-------+---+
希望这可以帮到您。
df1.foobar.foo
)? - maxfooobar.foo
时。但这并不适用于集合类型。您还可以查看https://dev59.com/PV4c5IYBdhLWcg3wFW6N#33850490 - zero323val df1 = df.withColumn("foo", foobarUdf($"x", $"y", $"z").getField("foo")).withColumn("bar", foobarUdf($"x", $"y", $"z").getField("bar"))
现在,模式有了两个新列:"foo"和"bar"。 - evinhas