Python Spark-如何将空 DataFrame 输出到 csv 文件(仅输出标头)?

Posted

技术标签:

【中文标题】Python Spark-如何将空 DataFrame 输出到 csv 文件(仅输出标头)?【英文标题】:Python Spark- How to output empty DataFrame to csv file (Only output header)? 【发布时间】:2017-11-29 03:26:40 【问题描述】:

我想将空数据框输出到 csv 文件。我使用这些代码:

df.repartition(1).write.csv(path, sep='\t', header=True)

但由于 dataframe 中没有数据,spark 不会将 header 输出到 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.schema 传递给 createDataFrame。如果您的架构中包含字符串以外的任何内容,则方法调用将中断。 【参考方案1】:

df.count() == 0 将使您的驱动程序检索跨执行程序的所有数据帧分区的计数。

在你的情况下,我会使用 df.take(1).isEmpty (Spark >= 2.1)。仍然很慢,但比原始的count() 更可取。

【讨论】:

【参考方案2】:

只有标题:

cols = '\t'.join(df.columns)
with open('./cols.csv', 'w') as f:
    f.write(cols)

【讨论】:

该文件可能不在本地系统中。我使用 Azure HDInsight 和 blob 存储。

以上是关于Python Spark-如何将空 DataFrame 输出到 csv 文件(仅输出标头)?的主要内容,如果未能解决你的问题,请参考以下文章