gpt4 book ai didi

Python 和 Spark : Dataframe Write does not persist on filesystem

转载 作者:太空宇宙 更新时间:2023-11-03 14:45:00 28 4
gpt4 key购买 nike

我想将我的数据帧写入本地文件系统:

path = "/tmp/test"

df = spark.sql(select_str)
df.write.parquet(path, mode="overwrite", compression="snappy")

代码运行没有错误,但是当我查看tmp时,没有test并且如果我想将其读回pyarrow parquet:

parquet = pq.ParquetDataset(path)

我收到错误:

IOError: Passed non-file path: /tmp/test

hdfs://tmp/test 也会发生同样的情况

我在这里缺少什么?

编辑

我在使用它之前先尝试创建一个真实的文件。所以我创建了/tmp/parquet.parquet。现在可以读取该文件,但它始终为空。所以这样写根本行不通。

编辑2

Spark 配置:

spark = SparkSession.builder \
.master("yarn") \
.appName("my_app") \
.config("spark.driver.bindAddress", "0.0.0.0") \
.config("spark.driver.host", host) \
.config("spark.driver.port", port) \
.config("spark.driver.memory", "4G") \
.config("spark.executor.memory", "8G") \
.config("spark.blockManager.port", portBlockManager) \
.enableHiveSupport() \
.getOrCreate()

最佳答案

您在哪种模式下运行 Spark 应用程序?客户端/集群/独立机?由于您尝试将文件保存在本地文件系统中,因此您需要了解驱动程序实际运行的位置(例如在哪台机器中)。

如果是集群模式,则文件很可能被写入集群上由资源管理器创建驱动程序的某个节点。最好的方法是将文件存储在 hdfs 中,默认情况下就是 df.write.parquet(path, mode="overwrite", compression="snappy")就可以了。

默认使用的文件系统是 hdfs,因此如果您只需提供 /tmp/test它正在 hdfs 中寻找该路径,而不是本地文件系统。

而且我猜你正在 pq.ParquetDataset 中使用 pyarrow 库默认情况下,它将在本地文件系统上查找路径。

确保在读/写期间使用正确的文件系统将解决该问题。

关于Python 和 Spark : Dataframe Write does not persist on filesystem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46298804/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com