Python 显示两个数据帧列之间的唯一值-pyspark
假设我在两个数据帧中有两个“ID”列,我想显示DF1中的ID,它在DF2中不存在 我不知道我应该使用join、merge还是isinPython 显示两个数据帧列之间的唯一值-pyspark,python,pyspark,Python,Pyspark,假设我在两个数据帧中有两个“ID”列,我想显示DF1中的ID,它在DF2中不存在 我不知道我应该使用join、merge还是isin cond = [df.name != df3.name] df.join(df3, cond, 'outer').select(df.name, df3.age).collect() 不确定改变条件是否会给我结果 使用isin和fir~df1['id]进行数据帧比较 df1: df2: 希望这个答案有帮助。使用isin和fir~df1['id]进行数据帧比较 d
cond = [df.name != df3.name]
df.join(df3, cond, 'outer').select(df.name, df3.age).collect()
不确定改变条件是否会给我结果 使用isin和fir
~df1['id]
进行数据帧比较
df1:
df2:
希望这个答案有帮助。使用
isin
和fir~df1['id]
进行数据帧比较
df1:
df2:
希望这个答案有帮助。在pyspark中,您可以使用leftanti-join
>>> df1 = spark.createDataFrame([(0,'val1'),(1,'val2'),(4,'val4')],['id','val'])
>>> df1.show()
+---+----+
| id| val|
+---+----+
| 0|val1|
| 1|val2|
| 4|val4|
+---+----+
>>> df2 = spark.createDataFrame([(0,'val1'),(1,'val2'),(3,'val3'),(2,'val2')],['id','val'])
>>> df2.show()
+---+----+
| id| val|
+---+----+
| 0|val1|
| 1|val2|
| 3|val3|
| 2|val2|
+---+----+
>>> df1.join(df2,'id','leftanti').show()
+---+----+
| id| val|
+---+----+
| 4|val4|
+---+----+
同样地
>>> df2.join(df1,'id','leftanti').show()
+---+----+
| id| val|
+---+----+
| 3|val3|
| 2|val2|
+---+----+
在pyspark中,可以使用leftanti-join
>>> df1 = spark.createDataFrame([(0,'val1'),(1,'val2'),(4,'val4')],['id','val'])
>>> df1.show()
+---+----+
| id| val|
+---+----+
| 0|val1|
| 1|val2|
| 4|val4|
+---+----+
>>> df2 = spark.createDataFrame([(0,'val1'),(1,'val2'),(3,'val3'),(2,'val2')],['id','val'])
>>> df2.show()
+---+----+
| id| val|
+---+----+
| 0|val1|
| 1|val2|
| 3|val3|
| 2|val2|
+---+----+
>>> df1.join(df2,'id','leftanti').show()
+---+----+
| id| val|
+---+----+
| 4|val4|
+---+----+
同样地
>>> df2.join(df1,'id','leftanti').show()
+---+----+
| id| val|
+---+----+
| 3|val3|
| 2|val2|
+---+----+
下面是一个代码片段,它使用pyspark.sql中的isin来过滤您不感兴趣的ID。map/lambda函数用于构建要筛选的ID列表
from __future__ import print_function
from pyspark.sql import SparkSession
spark_session = SparkSession \
.builder \
.appName("test_isin") \
.getOrCreate()
dict1 = [[1,'a'], [2,'b'], [3,'c'], [4,'d']]
dict2 = [[1, 'aa'], [5,'bb'], [2, 'cc'], [10, 'dd']]
df1 = spark_session.createDataFrame(dict1, ["id", "name"])
df2 = spark_session.createDataFrame(dict2, ["id", "name"])
df2_id = df2.select(df2.id).collect()
ids_to_be_filtered = []
map(lambda each : ids_to_be_filtered.append(each.id), df2_id)
result = df1[~df1.id.isin(df2_id)]
result.show()
这里还有到文档的链接
请不要忘记告诉我它是否解决了您的问题:)这里有一个代码片段,它使用pyspark.sql中的isin来过滤您不感兴趣的ID。map/lambda函数用于构建要筛选的ID列表
from __future__ import print_function
from pyspark.sql import SparkSession
spark_session = SparkSession \
.builder \
.appName("test_isin") \
.getOrCreate()
dict1 = [[1,'a'], [2,'b'], [3,'c'], [4,'d']]
dict2 = [[1, 'aa'], [5,'bb'], [2, 'cc'], [10, 'dd']]
df1 = spark_session.createDataFrame(dict1, ["id", "name"])
df2 = spark_session.createDataFrame(dict2, ["id", "name"])
df2_id = df2.select(df2.id).collect()
ids_to_be_filtered = []
map(lambda each : ids_to_be_filtered.append(each.id), df2_id)
result = df1[~df1.id.isin(df2_id)]
result.show()
这里还有到文档的链接
请不要忘记让我知道它是否解决了您的问题:)有一个错误“DataFrame”对象没有属性“loc”。这可能是一个熊猫df?你能给我看看你的代码吗。您是否创建了df1和df2
loc
是在0.11中引入的,因此您需要升级熊猫。出现错误“DataFrame”对象没有属性“loc”。这可能是一个熊猫df?你能给我看看你的代码吗。您是否创建了df1和df2loc
是在0.11中引入的,因此您需要升级您的熊猫。