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 docs,pyspark.sql.DataFrameWriter.csv
中的 path
参数是 "任何 Hadoop 支持的文件系统中的路径".
据我所知,有几种选择:
- 保存dataframe到HDFS/Hadoop然后复制到本地FS
hdfs dfs -mget ...
。这将是最直接和首选的方式。
- 做
df.collect()
把完整的dataframe给driver,然后写到本地FS。这对于大型数据帧可能不可行,因为它可能使驱动程序因 OOM 而崩溃。
- 使用
df.toLocalIterator()
将数据一次一个分区的带入驱动,然后写入本地FS。这避免/减少了先前选项出现的 OOM 机会。
我想在本地保存一个 csv 文件,而不是将其保存到 Hadoop 文件系统。当我使用以
开头的路径时出现以下错误> 'file://'
我该如何解决这个问题?或者如何在本地保存文件而不会出现任何错误?
恐怕它不会那样工作,因为在本地保存数据意味着它必须全部存在于驱动程序上。根据 pyspark docs,pyspark.sql.DataFrameWriter.csv
中的 path
参数是 "任何 Hadoop 支持的文件系统中的路径".
据我所知,有几种选择:
- 保存dataframe到HDFS/Hadoop然后复制到本地FS
hdfs dfs -mget ...
。这将是最直接和首选的方式。 - 做
df.collect()
把完整的dataframe给driver,然后写到本地FS。这对于大型数据帧可能不可行,因为它可能使驱动程序因 OOM 而崩溃。 - 使用
df.toLocalIterator()
将数据一次一个分区的带入驱动,然后写入本地FS。这避免/减少了先前选项出现的 OOM 机会。