我最近刚开始使用PySpark,所以我是一个完整的初学者。我想做的是从一个数据框基于另一个数据框进行过滤。 简单来说,我有df1的A,B,C列和df2的A列。我只想输出df2值以内的A列值的df1行。
目前,我将其设置如下:
df_final = df1.join(df2, df2.A == df1.A)
我在网上找到的也是以下解决方案:
df_final = df1.join(df2, Seq("A"), "left_anti")
似乎它做同样的事情,但是我想知道哪个更正确/更好地执行?
与此同时,我还发现可以使用.filter
,但我不知道如何使用它的数据框/列表。
实际上,主要问题是-执行此任务以尽快运行作业的最佳方法是什么?
感谢您和最诚挚的问候
答案 0 :(得分:2)
在注释上,Seq
内的Python
不可用。
df_final = df1.join(df2, Seq("A"), "left_anti")
假设df1
具有以下内容
+---+----+-----+
| A| B| C|
+---+----+-----+
| 1|John|Smith|
| 2|Praz| June|
| 3|hell|valu3|
| 4|test|valu2|
+---+----+-----+
df2
有
+---+
| A|
+---+
| 1|
| 2|
| 3|
| 4|
+---+
执行此操作
df_final = df1.join(df2, df2.A == df1.A)
现在它将警告!给您:
简单地构造真等于谓词“ A#154L = A#154L”。也许您需要使用别名。
这意味着您要尝试加入两个DataFrame
相同的column
。
你说,
我只想输出在df2值内具有A列值的df1行。
您可以使用df1
从A列中选择.select()
行,即
df1_A = df1.select('A')
然后,您可以join()
使用
from pyspark.sql.functions import col
df_final = df1_A.alias('le').join(df2.alias('ri'), (col('le.A') == col('ri.A')))
关于过滤器,您可以在需要基于某些条件进行评估时使用过滤器。有关更多信息,请参阅: class DataFrame