簡體   English   中英

如何使用Apache Spark中的列子集減去DataFrames

[英]How to subtract DataFrames using subset of columns in Apache Spark

如何使用Dataframe2對Dataframe1執行過濾操作。 我想從DataFrame1中刪除以下條件的行

Dataframe1.col1 = Dataframe2.col1
Dataframe1.col2 = Dataframe2.col2

我的問題與減去兩個數據幀不同,因為減去時我們使用所有列,但在我的問題中我想使用有限的列數

加入left_anti

scala> df1.show
+----+-----+-----+
|col1| col2| col3|
+----+-----+-----+
|   1|  one|   ek|
|   2|  two|  dho|
|   3|three|theen|
|   4| four|chaar|
+----+-----+-----+


scala> df2.show
+----+----+-----+
|col1|col2| col3|
+----+----+-----+
|   2| two|  dho|
|   4|four|chaar|
+----+----+-----+


scala> df1.join(df2, Seq("col1", "col2"), "left_anti").show
+----+-----+-----+
|col1| col2| col3|
+----+-----+-----+
|   1|  one|   ek|
|   3|three|theen|
+----+-----+-----+

可能重復的項目: Spark:如果兩個數據集的庫侖數完全相同,減去兩個 DataFrames

如果要自定義聯接條件,則可以使用“ anti”聯接。 這是pysaprk版本

創建兩個數據框:

數據框1:

l1 = [('col1_row1', 10), ('col1_row2', 20), ('col1_row3', 30)
df1 = spark.createDataFrame(l1).toDF('col1','col2')

df1.show()
+---------+----+
|     col1|col2|
+---------+----+
|col1_row1|  10|
|col1_row2|  20|
|col1_row3|  30|
+---------+----+

數據框2:

l2 = [('col1_row1', 10), ('col1_row2', 20), ('col1_row4', 40)]
df2 = spark.createDataFrame(l2).toDF('col1','col2')
df2.show()
+---------+----+
|     col1|col2|
+---------+----+
|col1_row1|  10|
|col1_row2|  20|
|col1_row4|  40|
+---------+----+

使用減法api:

df_final = df1.subtract(df2)
df_final.show()
+---------+----+
|     col1|col2|
+---------+----+
|col1_row3|  30|
+---------+----+

使用left_anti:

加盟條件:

join_condition = [df1["col1"] == df2["col1"], df1["col2"] == df2["col2"]]

最后加入

df_final = df1.join(df2, join_condition, 'left_anti')
df_final.show()
+---------+----+
|     col1|col2|
+---------+----+
|col1_row3|  30|
+---------+----+

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM