che*_*ens 9 amazon-s3 apache-spark apache-spark-sql spark-dataframe pyspark-sql
我有一个数据框,ai 将在 S3 中将其写入一个 .csv 文件,我使用以下代码:
df.coalesce(1).write.csv("dbfs:/mnt/mount1/2016//product_profit_weekly",mode='overwrite',header=True)
Run Code Online (Sandbox Code Playgroud)
它在 product_profit_weekly 文件夹中放置了一个 .csv 文件,目前 .csv 文件在 S3 中有一个奇怪的名称,是否可以在我要写的时候选择一个文件名?
所有 spark 数据帧编写器 (df.write.___) 都不会写入单个文件,而是每个分区写入一个块。我想你得到的是一个名为的目录
df.coalesce(1).write.csv("dbfs:/mnt/mount1/2016//product_profit_weekly
Run Code Online (Sandbox Code Playgroud)
里面的一个文件叫做
part-00000
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您正在做的事情可能非常低效且不是很“火爆”——您将所有数据帧分区合并为一个,这意味着您的任务实际上并未并行执行!
这是一个不同的模型。利用所有火花并行化,这意味着不要合并,并并行写入某个目录。
如果您有 100 个分区,您将获得:
part-00000
part-00001
...
part-00099
Run Code Online (Sandbox Code Playgroud)
如果您需要一个平面文件中的所有内容,请编写一个小函数以在事后合并它。您可以在 scala 中执行此操作,也可以在 bash 中执行以下操作:
cat ${dir}.part-* > $flatFilePath
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19503 次 |
| 最近记录: |