簡體   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