如何使用文件名中的分区值将分区数据写入文件?

时间:2016-04-12 03:25:13

标签: google-bigquery google-cloud-storage pyspark google-cloud-dataproc pyspark-sql

我按月从RDBMS卸载了大量数据,并根据该月将其加载到Google云端存储(GCS)中。然后,我将整个数据集读入数据集群上的pyspark数据框,并希望根据当天而不是月份将其重新写入GCS。我已成功写入云存储,其中每个文件仅包含特定日期,但无法根据该日期有效命名文件或目录。下面的代码执行我想要它做的事情,但它非常低效。我也知道理论上我可以通过使用镶木地板文件解决这个问题,但我的要求是写为CSV。最终,我希望每天使用一个表将这些数据加载到bigquery中,如果有一个更简单的解决方案(我可以将每个表每天导出到一个文件中)。

# Find distinct dates, and then write based on that.
dates = sqlContext.sql("SELECT distinct THE_DATE FROM tbl")

x = dates.collect()

for d in x:
    date = d.SLTRN_DT

    single_wk = sqlContext.sql("SELECT * FROM tbl where THE_DATE = '{}'".format(date))

    towrite = single_wk.map(to_csv)

    towrite.coalesce(4).saveAsTextFile('gs://buck_1/AUDIT/{}'.format(date))

所以说我读过的数据有日期['2014-01-01','2014-01-02','2014-01-03']我希望生成的文件/目录看起来像这样:

GS:// buck_1 /审计/ 2014年1月1日/部分-1
GS:// buck_1 /审计/ 2014年1月1日/部分2
GS:// buck_1 /审计/ 2014年1月1日/部分3
gs:// buck_1 / AUDIT / 2014-01-01 / part-4

GS:// buck_1 /审计/ 2014年1月2日/部分-1
GS:// buck_1 /审计/ 2014年1月2日/部分2
GS:// buck_1 /审计/ 2014年1月2日/部分3
gs:// buck_1 / AUDIT / 2014-01-02 / part-4

GS:// buck_1 /审计/ 2014年1月3日/部分-1
GS:// buck_1 /审计/ 2014年1月3日/部分2
GS:// buck_1 /审计/ 2014年1月3日/部分3
gs:// buck_1 / AUDIT / 2014-01-03 / part-4

0 个答案:

没有答案