关于python:DataFrame.to_csv抛出错误'[Errno 2]没有这样的文件或目录’

DataFrame.to_csv throws error '[Errno 2] No such file or directory'

我正在尝试将数据帧写入.csv文件:

1
2
3
4
5
6
7
8
now = datetime.datetime.now()
date = now.strftime("%Y-%m-%d")

enrichedDataDir ="/export/market_data/temp"
enrichedDataFile = enrichedDataDir +"/marketData_optam_" + date +".csv"

dbutils.fs.ls(enrichedDataDir)
df.to_csv(enrichedDataFile, sep='; ')

这使我产生了以下错误

IOError: [Errno 2] No such file or directory:
'/export/market_data/temp/marketData_optam_2018-10-12.csv'

但当我这样做

1
2
3
dbutils.fs.ls(enrichedDataDir)

Out[72]: []

没有错误!当我进入目录级别(更高一级)时:

1
2
3
4
5
6
enrichedDataDir ="/export/market_data"
dbutils.fs.ls(enrichedDataDir)

Out[74]:
[FileInfo(path=u'dbfs:/export/market_data/temp/', name=u'temp/', size=0L)
 FileInfo(path=u'dbfs:/export/market_data/update/', name=u'update/', size=0L)]

这也行。这对我来说意味着我真正拥有了我想要访问的所有文件夹。但我不知道你的.to_csv选项会抛出错误。我还检查了权限,很好!


主要问题是,我正在使用Microsoft Azure Datalake Store存储这些.csv文件。无论出于什么原因,都不可能通过df.to_csv向Azure数据湖存储区写入。

由于我试图使用df.to_csv,我使用的是熊猫数据帧,而不是火花数据帧。

我改为

1
2
3
from pyspark.sql import *

df = spark.createDataFrame(result,['CustomerId', 'SalesAmount'])

然后通过以下行写入csv

1
2
3
from pyspark.sql import *

df.coalesce(2).write.format("csv").option("header", True).mode("overwrite").save(enrichedDataFile)

它起作用了。


你试过先打开文件吗?(用下面的代码替换第一个示例的最后一行)

1
2
3
4
5
from os import makedirs
makedirs(enrichedDataDir)

with open(enrichedDataFile, 'w') as output_file:
    df.to_csv(output_file, sep='; ')