这似乎很基本,但我似乎无法弄清楚。我正在EMR上的Pyspark笔记本中工作,并已将pyspark数据框使用toPandas()
转换为pandas数据框。
现在,我想使用以下代码将此数据框保存到本地环境:
movie_franchise_counts.to_csv('test.csv')
但是我不断收到权限错误:
[Errno 13] Permission denied: 'test.csv'
Traceback (most recent call last):
File "/usr/local/lib64/python3.6/site-packages/pandas/core/generic.py", line 3204, in to_csv
formatter.save()
File "/usr/local/lib64/python3.6/site-packages/pandas/io/formats/csvs.py", line 188, in save
compression=dict(self.compression_args, method=self.compression),
File "/usr/local/lib64/python3.6/site-packages/pandas/io/common.py", line 428, in get_handle
f = open(path_or_buf, mode, encoding=encoding, newline="")
PermissionError: [Errno 13] Permission denied: 'test.csv'
任何帮助将不胜感激。
答案 0 :(得分:0)
当您在 EMR Notebook 中运行 PySpark 时,您是通过 Apache Livy 连接到 EMR 集群。因此,您的所有变量和数据帧都存储在集群中,当您运行 df.to_csv('file.csv')
时,您正在尝试将 CSV 保存在集群上,而不是保存在您的本地环境中。我有点挣扎,但这对我有用:
df.createOrReplaceTempView("view_name")
%load_ext sparkmagic.magics
-o
标志)%%sql -o df_local --maxrows 10
SELECT * FROM view_name
df_local
中,并且可以使用 df_local.to_csv('file.csv')
答案 1 :(得分:0)
这取决于您的内核运行的确切位置,即它是在本地运行还是在远程集群上运行。对于 EMR Notebooks,对于 EMR 版本标签 5.30、5.32+(6.0 和 6.1 除外),所有内核都在附加的 EMR 集群上远程运行,因此当您尝试保存文件时,它实际上是在尝试将文件保存在集群上,并且您可能无权访问集群上的该目录。对于上述以外的发布标签,内核在本地运行,因此对于那些发布标签,您可以将文件与代码一起保存在本地。