[英]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.