gpt4 book ai didi

python - 如何快速检查 PySpark Dataframe 中是否存在行?

转载 作者:行者123 更新时间:2023-12-04 15:05:47 24 4
gpt4 key购买 nike

我有一个像这样的 PySpark 数据框:

+------+------+
| A| B|
+------+------+
| 1| 2|
| 1| 3|
| 2| 3|
| 2| 5|
+------+------+

我想对表进行查找以查看特定行是否存在。例如,对于 A = 2B = 5 的测试,代码应返回 True,对于 A = 2,B = 10 代码应返回 False

我试过这个:

df[(df['A'] == 1) & (df['B'] == 2)].rdd.isEmpty()

不幸的是,这段代码需要很长时间才能执行,并且由于这是一个将执行多次的查找(对于 A 和 B 的不同值),我希望有一种更快的方法来完成此任务。

我正在考虑的其他解决方案是:

  • 将 PySpark 数据帧转换为 Pandas 数据帧,因为行查找速度更快
  • 使用 .where().filter() 虽然从我的尝试来看,我预计两者都不会更快
  • 使用 .count() 而不是 isEmpty()

最佳答案

最好从要查找的条目创建一个 spark dataframe,然后执行 semi joinanti join 来获取行在查找数据框中存在或不存在。这应该比一个一个地检查条目更有效率。

import pyspark.sql.functions as F

df = spark.createDataFrame([[2,5],[2,10]],['A','B'])

result1 = df.join(lookup, ['A','B'], 'semi').withColumn('exists', F.lit(True))

result2 = df.join(lookup, ['A','B'], 'anti').withColumn('exists', F.lit(False))

result = result1.unionAll(result2)

result.show()
+---+---+------+
| A| B|exists|
+---+---+------+
| 2| 5| true|
| 2| 10| false|
+---+---+------+

关于python - 如何快速检查 PySpark Dataframe 中是否存在行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66145045/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com