我希望将列中的单词拆分为多行,每行包含一个字符。下面的小例子:
Id Name StartDate EndDate
1 raj 2017-07-05 2008-08-06
这里的预期结果是:
Id Name StartDate EndDate
1 r 2017-07-05 2008-08-06
1 a 2017-07-05 2008-08-06
1 j 2017-07-05 2008-08-06
答案 0 :(得分:0)
首先将字符串拆分为列表,然后使用explode
。请注意,需要使用filter
,否则一行将有一个空字符串。
val df = spark.createDataFrame(Seq((1, "raj"), (2, "test"))).toDF("Id", "Name")
val df2 = df.withColumn("Name", explode(split($"Name", ""))).filter($"Name" =!= "")
这会给你:
+---+----+
| Id|Name|
+---+----+
| 1| r|
| 1| a|
| 1| j|
| 2| t|
| 2| e|
| 2| s|
| 2| t|
+---+----+
注意,对于旧版本的Spark(早于2.0.0),在检查不等式时使用!==
而不是=!=
。