我想将空数据帧输出到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)
它有效,但我想询问是否有更好的方法没有计数功能。
答案 0 :(得分:0)
仅标题:
cols = '\t'.join(df.columns)
with open('./cols.csv', 'w') as f:
f.write(cols)
答案 1 :(得分:0)
df.count() == 0
将使您的驱动程序检索执行程序中所有数据帧分区的计数。
在你的情况下,我会使用df.take(1).isEmpty
(Spark> = 2.1)。仍然很慢,但比原始count()
更好。