首页 > 解决方案 > pyspark:比较给定列的值时从数据框中获取公共数据

问题描述

我有两个这样的 pyspark 数据框。数据帧 A

+----+---+
|name1| id1|
+----+---+
|   a|  3|
|   b|  5|
|   c|  7|
+----+---+

数据帧 B

+----+---+
|name2| id2|
+----+---+
|   a|  13|
|   b|  15|
|   c|  17|
|   d|  6|
|   e|  0|
|   f|  3|
+----+---+

如果 name1(来自 df a)和 name2(来自 df b)的值匹配,我想获取数据帧 B 的内容。如下所示。o/p 数据帧

+----+---+
|name2| id2|
+----+---+
|   a|  13|
|   b|  15|
|   c|  17|
+----+---+

我想避免计算昂贵的方法,如 collect() 等。这如何在 apache spark 中完成?

标签: apache-sparkpyspark

解决方案


from pyspark.sql.functions import *

df1.join(df2, df1.name1 == df2.name2).select('df2.*')

OR (using sql)

df1.registerTempTable("tableA")
df2.registerTempTable("tableB")

val result = sqlContext.sql("select b.name2, b.id2 from tableA a join tableB b on a.name1=b.name2")

result.show()
+----+----+
|name2| id2|
+----+----+
|   a|  13|
|   b|  15|
|   c|  17|
+----+---+

推荐阅读