【发布时间】:2020-10-01 11:02:21
【问题描述】:
我有一个包含大约 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 会有所帮助,因此它不必经过数百行,只需检查它是否为空。如果我取出计数部分,它工作正常。
我已经看到了一些重写计数语句的方法(我已经通过How to check if spark dataframe is empty?),但到目前为止我还没有运气。
【问题讨论】: