我正在尝试将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:[错误2]没有这样的文件或目录: '/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
选项会引发错误。我还检查了权限,这很好!
答案 0 :(得分:1)
主要问题是,我正在使用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)
它有效。
答案 1 :(得分:1)
这是一个更一般的答案。
如果要将文件从DBFS加载到Pandas数据帧,可以执行此技巧。
将文件从dbfs移至文件
%fs cp dbfs:/FileStore/tables/data.csv文件:/FileStore/tables/data.csv
从文件目录读取数据
data = pd.read_csv('file:/FileStore/tables/data.csv')
谢谢
答案 2 :(得分:0)
您是否尝试过首先打开文件? (用下面的代码替换第一个示例的最后一行)
from os import makedirs
makedirs(enrichedDataDir)
with open(enrichedDataFile, 'w') as output_file:
df.to_csv(output_file, sep='; ')