Pyspark EMR笔记本-无法将文件保存到EMR环境

时间:2020-06-24 20:53:13

标签: pandas pyspark amazon-emr

这似乎很基本,但我似乎无法弄清楚。我正在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'

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

当您在 EMR Notebook 中运行 PySpark 时,您是通过 Apache Livy 连接到 EMR 集群。因此,您的所有变量和数据帧都存储在集群中,当您运行 df.to_csv('file.csv') 时,您正在尝试将 CSV 保存在集群上,而不是保存在您的本地环境中。我有点挣扎,但这对我有用:

  1. 将您的 PySpark 数据帧存储为临时视图:df.createOrReplaceTempView("view_name")
  2. 加载 SparkMagic:%load_ext sparkmagic.magics
  3. 从视图中选择并使用 SparkMagic 将输出加载到本地(-o 标志)
%%sql -o df_local --maxrows 10
SELECT * FROM view_name
  1. 现在您的数据位于 Pandas 数据框 df_local 中,并且可以使用 df_local.to_csv('file.csv')

答案 1 :(得分:0)

这取决于您的内核运行的确切位置,即它是在本地运行还是在远程集群上运行。对于 EMR Notebooks,对于 EMR 版本标签 5.30、5.32+(6.0 和 6.1 除外),所有内核都在附加的 EMR 集群上远程运行,因此当您尝试保存文件时,它实际上是在尝试将文件保存在集群上,并且您可能无权访问集群上的该目录。对于上述以外的发布标签,内核在本地运行,因此对于那些发布标签,您可以将文件与代码一起保存在本地。