我想将空数据帧输出到CSV文件。我使用这些代码:
df.repartition(1).write.csv(path, sep='t', header=True)
但是由于数据框中没有数据,因此Spark不会输出CSV文件的标题。然后,我将代码修改为:
if df.count() == 0:
empty_data = [f.name for f in df.schema.fields]
df = ss.createDataFrame([empty_data], df.schema)
df.repartition(1).write.csv(path, sep='t')
else:
df.repartition(1).write.csv(path, sep='t', header=True)
它有效,但是我想询问如果没有计数功能,是否有更好的方法。
df.count() == 0
将使您的驱动程序程序在执行者中检索所有数据帧分区的计数。
在您的情况下,我将使用df.take(1).isEmpty
(Spark> = 2.1)。仍然很慢,但比RAW count()
更可取。
仅标头:
cols = 't'.join(df.columns)
with open('./cols.csv', 'w') as f:
f.write(cols)