【问题标题】:How to transform a string column of a dataframe into a column of Array[String] with Apache Spark and Scala如何使用 Apache Spark 和 Scala 将数据帧的字符串列转换为 Array[String] 列
【发布时间】:2019-05-10 08:34:48
【问题描述】:

我有一个 DataFrame,其中有一列“title_from”,如下所示。

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

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

我怎样才能做到这一点?如何将字符串数据帧转换为 Array[string] 数据帧?我希望 newDF 的每一行都是来自 df 的单词数组。

感谢您的帮助!

【问题讨论】:

  • “它不起作用”不是一个足够精确的错误描述,我们无法帮助您。 什么不起作用? 如何不起作用?你的代码有什么问题?您收到错误消息吗?错误信息是什么?你得到的结果不是你期望的结果吗?你期望什么结果,为什么,你得到的结果是什么,两者有什么不同?您正在观察的行为不是期望的行为吗?期望的行为是什么,为什么,观察到的行为是什么,它们有何不同?
  • 您对我的描述完全正确。我一定像你说的那样描述过。

标签: scala apache-spark dataframe transformation


【解决方案1】:

您可以使用withColumn 函数。

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

【讨论】:

  • 当我尝试这个时,我得到以下两个错误:错误:(79, 75) 找不到参数 impl 的隐式值:breeze.linalg.split.Impl2[org.apache.spark.sql .Column,String,VR] val title_from_words_df = finalDF.withColumn("title_from_words", split(col("title_from"), "\\s+")).select("title_from_words") 错误:(79, 75) 不够方法应用的参数:(隐式 impl:breeze.linalg.split.Impl2[org.apache.spark.sql.Column,String,VR])VR 中的特征 UFunc。未指定值参数 impl。我做错了什么?感谢您的尽快回复!
  • @atheodos 您导入了不同的拆分函数。要么删除其他导入,要么像 functions.split 那样添加前缀火花拆分功能
  • 谢谢!当我为溢出的函数添加前缀时,它已修复。它对我来说很好用!
【解决方案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|
+-----+

【讨论】:

    猜你喜欢
    • 2021-02-03
    • 2018-02-19
    • 2018-07-16
    • 2022-12-17
    • 2015-11-16
    • 2017-11-03
    • 2019-07-25
    • 1970-01-01
    • 2019-07-03
    相关资源
    最近更新 更多