Py4JJavaError: An error occured while calling o8660.save when trying to save csv file locally

Py4JJavaError: An error occured while calling o8660.save when trying to save csv file locally

我想在本地保存一个 csv 文件,而不是将其保存到 Hadoop 文件系统。当我使用以

开头的路径时出现以下错误
> 'file://'

我该如何解决这个问题?或者如何在本地保存文件而不会出现任何错误?

恐怕它不会那样工作,因为在本地保存数据意味着它必须全部存在于驱动程序上。根据 pyspark docspyspark.sql.DataFrameWriter.csv 中的 path 参数是 "任何 Hadoop 支持的文件系统中的路径".

据我所知,有几种选择:

  1. 保存dataframe到HDFS/Hadoop然后复制到本地FShdfs dfs -mget ...。这将是最直接和首选的方式。
  2. df.collect()把完整的dataframe给driver,然后写到本地FS。这对于大型数据帧可能不可行,因为它可能使驱动程序因 OOM 而崩溃。
  3. 使用df.toLocalIterator()将数据一次一个分区的带入驱动,然后写入本地FS。这避免/减少了先前选项出现的 OOM 机会。