Để làm điều này theo chương trình, bạn có thể tạo ra một chuỗi các biểu thức với (0 until 3).map(i => col("temp").getItem(i).as(s"col$i"))
(giả sử bạn cần 3 cột như kết quả) và sau đó áp dụng nó vào select
với : _*
cú pháp:
df.withColumn("temp", split(col("columnToSplit"), "\\.")).select(
(0 until 3).map(i => col("temp").getItem(i).as(s"col$i")): _*
).show
+----+----+----+
|col0|col1|col2|
+----+----+----+
| a| b| c|
| d| e| f|
+----+----+----+
Để giữ cho tất cả các cột:
df.withColumn("temp", split(col("columnToSplit"), "\\.")).select(
col("*") +: (0 until 3).map(i => col("temp").getItem(i).as(s"col$i")): _*
).show
+-------------+---------+----+----+----+
|columnToSplit| temp|col0|col1|col2|
+-------------+---------+----+----+----+
| a.b.c|[a, b, c]| a| b| c|
| d.e.f|[d, e, f]| d| e| f|
+-------------+---------+----+----+----+
Hoạt động tuyệt vời, Cảm ơn! –
yêu cầu nhập gì để tách? – Jake
@Jake nhập org.apache.spark.sql.functions.split sử dụng tính năng này –