首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache中基于数组中单词的DataFrame过滤

Apache中基于数组中单词的DataFrame过滤
EN

Stack Overflow用户
提问于 2018-10-02 17:31:42
回答 1查看 1.1K关注 0票数 0

我试图通过只获取数组中包含单词的行来筛选数据集。我使用contains方法,它适用于字符串,但不适用于数组。下面是代码

代码语言:javascript
复制
val dataSet = spark.read.option("header","true").option("inferschema","true").json(path).na.drop.cache()

val threats_path = spark.read.textFile("src/main/resources/cyber_threats").collect()

val newData = dataSet.select("*").filter(col("_source.raw_text").contains(threats_path)).show()

它不能工作,因为threats_path是字符串数组,包含字符串的工作。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-02 17:38:20

可以在列上使用isin udf。

会像这样,

代码语言:javascript
复制
val threats_path = spark.read.textFile("src/main/resources/cyber_threats").collect()

val dataSet = ???

dataSet.where(col("_source.raw_text").isin(thread_path: _*))

注意,如果thread_paths的大小很大,这将对性能产生影响,因为collect和使用isin的过滤器都会影响性能。

我建议您使用filter dataSetthreats_path使用join。会像这样,

代码语言:javascript
复制
val dataSet = spark.read.option("header","true").option("inferschema","true").json(path).na.drop

val threats_path = spark.read.textFile("src/main/resources/cyber_threats")

val newData = threats_path.join(dataSet, col("_source.raw_text") === col("<col in threats_path >"), "leftouter").show()

希望这能有所帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52613487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档