从列表中搜索数据框以及在 Scala 的新列中找到的所有元素

Posted

技术标签:

【中文标题】从列表中搜索数据框以及在 Scala 的新列中找到的所有元素【英文标题】:Dataframe search from list and all elemts found in a new column in Scala 【发布时间】:2018-05-31 08:15:47 【问题描述】:

我有一个 df,我需要搜索关键字列表中是否有任何元素集。如果是,我需要将所有这些关键字 @ 分隔在一个名为 found 或 not 的新列中。

我的df是这样的

utid | description
123  | my name is harry and I live in newyork
234  | my neighbour is daniel and he plays hockey

列表很大,比如 list =harry,daniel,hockey,newyork

输出应该是这样的

utid | description                                | foundornot
123  | my name is harry and I live in newyork     | harry@newyork
234  | my neighbour is daniel and he plays hockey | daniel@hockey

这个列表相当大,像一些 20k 关键字..如果找不到打印 NF

【问题讨论】:

【参考方案1】:

您可以在udf 函数中检查list 中的元素是否存在description 列的每一行,并将元素列表作为由@ 分隔的字符串来返回它,否则将 NF 字符串作为

val list = List("harry","daniel","hockey","newyork")

import org.apache.spark.sql.functions._
def checkUdf = udf((strCol: String) => if (list.exists(strCol.contains)) list.filter(strCol.contains(_)).mkString("@") else "NF")

df.withColumn("foundornot", checkUdf(col("description"))).show(false)

这应该给你

+----+------------------------------------------+-------------+
|utid|description                               |foundornot   |
+----+------------------------------------------+-------------+
|123 |my name is harry and i live in newyork    |harry@newyork|
|234 |my neighbour is daniel and he plays hockey|daniel@hockey|
+----+------------------------------------------+-------------+

【讨论】:

如果未找到 NF,则不会打印它 那你一定错过了什么。你能再检查一遍,把代码和答案合起来吗?如果没有,您可以更新问题,我会看到它

以上是关于从列表中搜索数据框以及在 Scala 的新列中找到的所有元素的主要内容,如果未能解决你的问题,请参考以下文章

从数据框字符串列中提取特定单词并存储在 Python 的新列中

熊猫:循环列表并从列中的列表中查找单词...使用列表中的找到的单词创建新列

如何有条件地将子字符串复制到熊猫数据框的新列中?

在附属机构中查找城市名称,并将它们与其对应的国家/地区添加到数据框的新列中

如何使用 Scala/Spark 添加不基于数据框中现有列的新列? [复制]

如何使用scala数据框添加具有以下行值的新列[重复]