将字符串拆分为多行,每行一个字符

时间:2017-11-06 07:06:16

标签: mysql apache-spark dataframe hive apache-spark-sql

我希望将列中的单词拆分为多行,每行包含一个字符。下面的小例子:

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

1 个答案:

答案 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),在检查不等式时使用!==而不是=!=