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 文件(仅输出标头)?的主要内容,如果未能解决你的问题,请参考以下文章

Spark saveAsTextFile 将空文件 - <directory>_$folder$ 写入 S3

Spark SQL读写方法

为啥threading.thread将空字典传递给python中的函数线程

将空值传递给 Python 中的存储过程

DataFrame编程模型初谈与Spark SQL

在 python 中,使用 lambda 将空列表添加到数据框列会引发 valueError