我有两个火花DF,我需要加入。只选择df1中存在的df2中的值,不应该有重复的行。
例如:
df1:
+-------------+---------------+----------+
|a |b |val |
+-------------+---------------+----------+
| 202003101750| 202003101700|1712384842|
| 202003101740| 202003101700|1590554927|
| 202003101730| 202003101700|1930860788|
| 202003101730| 202003101600| 101713|
| 202003101720| 202003101700|1261542412|
| 202003101720| 202003101600| 1824155|
| 202003101710| 202003101700| 912601761|
+-------------+---------------+----------+
df2:
+-------------+---------------+
|a |b |
+-------------+---------------+
| 202003101800| 202003101700|
| 202003101800| 202003101700|
| 202003101750| 202003101700|
| 202003101750| 202003101700|
| 202003101750| 202003101700|
| 202003101750| 202003101700|
| 202003101740| 202003101700|
| 202003101740| 202003101700|
+-------------+---------------+
我正在做以下工作:
df1.join(df2, Seq("a","b"),"leftouter"). Anywhere("val"). isNotNull)
但是我的输出有几个重复的行。
+-------------+---------------+----------+
|a |b |val |
+-------------+---------------+----------+
| 202003101750| 202003101700|1712384842|
| 202003101750| 202003101700|1712384842|
| 202003101750| 202003101700|1712384842|
| 202003101750| 202003101700|1712384842|
| 202003101740| 202003101700|1590554927|
| 202003101740| 202003101700|1590554927|
| 202003101740| 202003101700|1590554927|
| 202003101740| 202003101700|1590554927||
+-------------+---------------+----------+
如果val从df1中删除,我试图实现一个类似except的操作。但是除了之外,似乎不起作用。例如,以下是所需的操作
df1。下降(col(“val”))。除了(“df2”)
之外,df1的模式如下:
root
|-- a: String (nullable = true)
|-- b: String (nullable = true)
|-- val: long (nullable = true)
另外,左外连接和except之间到底有什么区别?预期产出:
+-------------+---------------+----------+
|a |b |val |
+-------------+---------------+----------+
| 202003101750| 202003101700|1712384842|
| 202003101740| 202003101700|1590554927||
+-------------+---------------+----------+
可以使用函数dropDuplicates()
,删除所有重复的行:
uniqueDF = df.dropDuplicates()
或者您可以指定要匹配的列:
uniqueDF = df.dropDuplicates("a","b")
左外
连接将从左表获取所有行,从右表获取匹配行。
除了
将给出与第一个数据帧相比第二个数据帧中不存在的行(没有重复)。
对于您的情况,您可以使用内部
(或)外部
与dropDuplicates连接。
df1.join(df2, Seq("a", "b"), "inner").dropDuplicates().show()
//+------------+------------+----------+
//| a| b| val|
//+------------+------------+----------+
//|202003101740|202003101700|1590554927|
//|202003101750|202003101700|1712384842|
//+------------+------------+----------+
df1.join(df2, Seq("a", "b"), "rightouter").where(col("val").isNotNull).dropDuplicates().show()
//+------------+------------+----------+
//| a| b| val|
//+------------+------------+----------+
//|202003101740|202003101700|1590554927|
//|202003101750|202003101700|1712384842|
//+------------+------------+----------+
我试图通过2列连接2个pyspark数据帧,数据帧是: DF1: df2: 我想得到下面的数据帧: 我试过了: 这会让我: 然后我使用以下方法消除重复项: 有没有更好的方法? 我尝试了其他连接(左连接、内连接等。),但不会得到我想要的结果 还有,有没有更好的方法来消除重复行?
我有一个这样的专栏: 我希望专栏看起来像这样: 只希望保留重复记录的第一个或最后一个。 目前,我使用的是: 但它不起作用。我错过了什么吗?
假设我有两个数据帧,具有不同级别的信息,如下所示: 我想加入df1和df2,并将“值”信息传递给df2:一天中的每一小时都将获得“日”值。 预期产出:
我有2个数据帧,和,有一个列(和其他非重要的)。 我想在中删除包含已在中的电子邮件的行。 我该怎么做?
我想从两个表中删除相关的行。可能有外键,也可能没有。因此,可以肯定的是,我不想依赖外键及其在DELETE上的
我试图在包含重复索引的两个数据帧上使用pandas concat。 当我尝试连接我的两个数据帧时,我得到以下错误 传递值的形状是(12, 180054),指数暗示(12,10000)。 为了更好地理解这个问题,我创建了两个数据帧: 看起来像: 和 看起来像: 这与我的原始数据帧也有类似的方面。索引是重复的,并且是日期时间格式。 但是,concat(axis=1)可以很好地创建以下数据帧 (这正是我