首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据列表的匹配值将公共行过滤到Spark DataFrame中

根据列表的匹配值将公共行过滤到Spark DataFrame中
EN

Stack Overflow用户
提问于 2021-04-20 20:48:29
回答 1查看 56关注 0票数 0

我必须在两个名为dfAdfB的DataFrames之间找到对应的行

代码语言:javascript
运行
复制
dfA.show()
+---+-----+-------+
| id| name|address|
+---+-----+-------+
|  1| AAAA|  Paris|
|  4| DDDD| Sydney|
+---+-----+-------+

dfB.show()
+---+-----+-------+
| id| name|address|
+---+-----+-------+
|  1| AAAA|  Paris|
|  2| BBBB|NewYork|
|  3| CCCC| London|
|  4| DDDD| Sydney|
+---+-----+-------+

我使用如下构造的值列表:

代码语言:javascript
运行
复制
val array = dfA
  .select("id")
  .map(r =>{r.getString(0)})
  .collect()

array Output:
1
2

为了在两个DataFrames之间具有相应的值:

代码语言:javascript
运行
复制
val dfFilter = dfB.filter(dfB.col("id").isInCollection(array))
  .select("id")

dfFilter.show()
+---+
| id|
+---+
|  1|
|  4|
+---+

如果用户只使用一个用于搜索的名为id的列,则此代码可以正常工作。

我的问题是如何使用dfAdfB之间的几个列(idnameaddress)来研究公共行

EN

回答 1

Stack Overflow用户

发布于 2021-04-20 21:34:26

您可以执行半连接。只需在Seq中放置任意数量的列,即可用于过滤。

代码语言:javascript
运行
复制
val result = dfA.join(dfB, Seq("id", "name", "address"), "left_semi")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67179276

复制
相关文章

相似问题

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