如何使用Apache Spark和Scala将数据帧的字符串列转换为Array [String]的列

时间:2018-12-09 02:09:31

标签: scala apache-spark dataframe transformation

我有一个DataFrame,其列为'title_from',如下所示。 enter image description here

此列包含一个句子,我想将此列转换为Array [String]。我已经尝试过类似的方法,但是它不起作用。

val newDF = df.select("title_from").map(x => x.split("\\\s+")

我该如何实现?如何将字符串的数据帧转换为Array [string]的数据帧?我希望newDF的每行都是df的单词数组。

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

您可以使用withColumn函数。

import org.apache.spark.sql.functions._
val newDF = df.withColumn("split_title_from", split(col("title_from"), "\\s+"))
              .select("split_title_from")

答案 1 :(得分:-2)

您可以尝试按照以下步骤获取所有作者的列表吗?

scala> val df = Seq((1,"a1,a2,a3"), (2,"a1,a4,a10")).toDF("id","author")
df: org.apache.spark.sql.DataFrame = [id: int, author: string]

scala> df.show()
+---+---------+
| id|   author|
+---+---------+
|  1| a1,a2,a3|
|  2|a1,a4,a10|
+---+---------+


scala> df.select("author").show
+---------+
|   author|
+---------+
| a1,a2,a3|
|a1,a4,a10|
+---------+

scala> df.select("author").flatMap( row => { row.get(0).toString().split(",")}).show()
+-----+
|value|
+-----+
|   a1|
|   a2|
|   a3|
|   a1|
|   a4|
|  a10|
+-----+