python - 如何快速检查 PySpark Dataframe 中是否存在行?
问题描述
我有一个像这样的 PySpark 数据框:
+------+------+
| A| B|
+------+------+
| 1| 2|
| 1| 3|
| 2| 3|
| 2| 5|
+------+------+
我想对表进行查找以查看是否存在特定行。例如,对于 的测试A = 2
,B = 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 数据框,然后执行 asemi join
或 ananti 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|
+---+---+------+
推荐阅读
- c# - 如何在 C# 应用程序中解密 smime 文件?
- components - 如何在 VSCODE 中使用 Textmate 更改 JSX 组件标签的语法突出显示?
- android - android studio - 如何根据文本调整按钮的大小?
- node.js - 如何构建动态 MongoDB 查询
- ios - Cordova - 使用多个目标配置文件更新 exportOptions plist 以创建 ipa
- javascript - 迭代 Swagger YAML 文件以动态生成属性列表
- docusignapi - 一小时后Docusign API失败
- microsoft-graph-api - Microsoft Graph API 为同一邮件返回了不同的 threadID
- android - 从 DB 文件创建 Android Room 实体类
- javascript - 如何在不调用/创建侦听器函数的情况下增加 let 变量