DataFrame.to_csv 抛出错误“[Errno 2] 没有那个文件或目录”

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

我正在尝试将 DataFrame 写入 .csv 文件:

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'

但是当我这样做的时候

dbutils.fs.ls(enrichedDataDir)

Out[72]: []

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

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 选项会引发错误。我也检查了权限,没问题!

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

from os import makedirs
makedirs(enrichedDataDir)

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

主要问题是,我正在使用 Micrsoft Azure Datalake Store 来存储这些 .csv 文件。无论出于何种原因,都无法通过 df.to_csv 写入 Azure Datalake Store。

由于我尝试使用 df.to_csv 我使用的是 Pandas DataFrame 而不是 Spark DataFrame。

我改成了

from pyspark.sql import *

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

然后通过以下行写入 csv

from pyspark.sql import *

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

并且有效。

这是一个更笼统的答案。

如果你想从 DBFS 加载文件到 Pandas 数据帧,你可以使用这个技巧。

  1. 将文件从 dbfs 移动到文件

    %fs cp dbfs:/FileStore/tables/data.csv 文件:/FileStore/tables/data.csv

  2. 从文件目录读取数据

    数据=pd.read_csv('file:/FileStore/tables/data.csv')

谢谢

检查您挂载此路径时用于容器的 sas 令牌的权限。如果它以“sp=racwdlmeopi”开头,那么您有一个带有不可变存储的 sas 令牌。您的令牌应以“ sp=racwdlmeop