繁体   English   中英

如何按日期将 Pyspark dataframe 导出到 csv 文件

[英]How to export Pyspark dataframe to csv file by date

我有一个 Pyspark dataframe 包含日期和语句(2 个不同的列)。 我想根据唯一日期将所有语句导出到不同的 csv 文件。 我怎么做? 例如,我将在 1 月 1 日有一个名为 01012016.csv 的 csv 文件,其中包括整个月的“Hello World”和“Hello World2”等。 在月底,我想在一个名为 Jan2016.csv、Feb2016.csv 的大 csv 文件中编译所有语句

日期声明

2016/01/01 你好世界

2016/01/01 你好世界2

2016/01/02 你好世界2

……

2016/02/30 你好世界31

我们可以创建一个编写器 function 并将其与foreachPartition一起使用。 这是一个例子。

# input dataframe
spark.sparkContext.parallelize(data_ls).toDF(['dt', 'statement']). \
    withColumn('dt', func.col('dt').cast('date')). \
    show()

# +----------+------------+
# |        dt|   statement|
# +----------+------------+
# |2016-01-01| hello world|
# |2016-01-01|hello world2|
# |2016-01-03| hello world|
# |2016-01-02|hello world2|
# +----------+------------+

创建 function 将值写入文件

def write_to_csv(theRow):
    for i, row in enumerate(theRow):
        dt, statement, fname = row
        if i == 0:
            txt = open(r"./drive/MyDrive/{0}.txt".format(fname), "w")
            txt.write(statement)
            txt.close()
        else:
            txt = open(r"./drive/MyDrive/{0}.txt".format(fname), "a")
            txt.write('\n')
            txt.write(statement)
            txt.close()

在 foreachPartition 中使用前面提到的foreachPartition

spark.sparkContext.parallelize(data_ls).toDF(['dt', 'statement']). \
    withColumn('dt', func.col('dt').cast('date')). \
    withColumn('fname', func.date_format('dt', 'yyyyMMdd')). \
    repartition('dt'). \
    foreachPartition(write_to_csv)

如果您的节点可以访问该位置,则文件现在应该存在于那里。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM