我有一张大约有 10 亿条记录的表。我对其进行查询以基本上找到重复项。如果查询结果为0行,则没有重复,否则有。如果有重复,我想将该表名写入文本文件。所以我正在做的是
df = spark.sql("SELECT count(*) FROM table GROUP BY key1,key2,key3 HAVING count(*) > 1 LIMIT 1)
if df.count() > 0:
with open('duplicate_tables.txt','a') as file:
file.write('\n' + table)
上df.count()
线时,我收到一个错误,例如java.io.IOException: No space left on device
. 是不是因为count()
效率低下。当我尝试使用时,我也会遇到同样的错误
if len(df.head(1)) != 0:
在我的查询中,我认为(希望)添加 LIMIT 1 会有所帮助,因此它不必经过数百行,只需检查它是否为空。如果我取出计数部分,它工作正常。
我已经看到了一些重写 count 语句的方法(我已经完成了How to check if spark dataframe is empty?),但到目前为止我还没有运气。