我有这样的数据帧
data = [(("ID1", "A", 1)), (("ID1", "B", 5)), (("ID2", "A", 12)),
(("ID3", "A", 3)), (("ID3", "B", 3)), (("ID3", "C", 5)), (("ID4", "A", 10))]
df = spark.createDataFrame(data, ["ID", "Type", "Value"])
df.show()
+---+----+-----+
| ID|Type|Value|
+---+----+-----+
|ID1| A| 1|
|ID1| B| 5|
|ID2| A| 12|
|ID3| A| 3|
|ID3| B| 3|
|ID3| C| 5|
|ID4| A| 10|
+---+----+-----+
我只想提取那些只包含一个特定类型的行(或id)-“A”
因此,我的预期输出将包含以下行
^{pr2}$对于每个ID可以包含任何类型-A、B、C等等。我想提取那些只包含一个类型-“A”的ID
如何在PySpark中实现这一点
你可以申请一个过滤器。在
如果我们需要过滤只有一个记录的所有id,并且类型也为'A',那么下面的代码可能是解决方案
^{pr2}$会有更好的替代方法来找到同样的方法。在
根据OP的要求,我在评论栏下写下了我的答案。在
当前问题的目的是过滤掉
DataFrame
,其中每个特定的ID
都只有一个Type
A
元素,其他元素都没有。在其思想是先用} 将} 而不是{a4},因为后者不会返回唯一的元素,而是返回所有元素。在
ID
对DataFrame
进行DataFrame
,这样我们就可以在一个数组中使用^{Type
的所有unique
元素分组。有unique
元素很重要,因为对于一个特定的ID
可能有两行,其中两行都有Type
作为A
。这就是为什么我们应该使用^{然后我们应该使用^{} 来获得组中}的第一个值。如果}的唯一值,如果{}重复出现,则返回最大值。在
^{pr2}$Type
和{A
是某个特定的unique
Type
,那么当A
出现一次时,A
将返回{最后,我们将同时设置两个条件来过滤出所需的数据集。在
条件1:它使用^{} 检查}。在
Type
数组中是否存在{条件2:它检查数组的^{} 。如果大小大于1,则应该有多个
Types
。在我不太精通Python,这里是Scala的一个可能的解决方案:
其思想是按
ID
分组,并只过滤包含A
值的大小为1的Types
。在相关问题 更多 >
编程相关推荐