从列表中搜索数据框以及在 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 的新列中
熊猫:循环列表并从列中的列表中查找单词...使用列表中的找到的单词创建新列
在附属机构中查找城市名称,并将它们与其对应的国家/地区添加到数据框的新列中