Amazon web services 当另一个进程写入S3存储桶时,从S3存储桶读取Spark数据帧?

Amazon web services 当另一个进程写入S3存储桶时,从S3存储桶读取Spark数据帧?,amazon-web-services,apache-spark,amazon-s3,amazon-emr,bucket,Amazon Web Services,Apache Spark,Amazon S3,Amazon Emr,Bucket,读取spark数据帧并说通过Jupyter笔记本和另一个同时写入s3存储桶的进程来持久化它会有什么问题吗 说 我读到的数据帧如下: s3 = spark.read.parquet('s3://path/to/table') 在笔记本上记下这个 同时,我通过一个不同的进程在某个点写入同一个s3存储桶,例如 system('s3-dist-cp --src --dest s3://path/to/table) 这会成为一个问题吗?我可以搞乱读取/数据帧,但我不想阻止写入存储桶。这将导致您读取的

读取spark数据帧并说通过Jupyter笔记本和另一个同时写入s3存储桶的进程来持久化它会有什么问题吗

我读到的数据帧如下:

 s3 = spark.read.parquet('s3://path/to/table')
在笔记本上记下这个

同时,我通过一个不同的进程在某个点写入同一个s3存储桶,例如

system('s3-dist-cp --src --dest s3://path/to/table)

这会成为一个问题吗?我可以搞乱读取/数据帧,但我不想阻止写入存储桶。

这将导致您读取的第一个DF上的任何操作出现FNF异常

 s3 = spark.read.parquet('s3://path/to/table')
上面涉及的第一个spark作业是列出叶文件和目录。由于还有另一个进程正在写入/重写数据,因此路径将过时


此外,还应考虑S3的最终一致性行为。

这将导致您读取的第一个DF上的任何操作出现FNF异常

 s3 = spark.read.parquet('s3://path/to/table')
上面涉及的第一个spark作业是列出叶文件和目录。由于还有另一个进程正在写入/重写数据,因此路径将过时


此外,还应考虑S3的最终一致性行为。

因此,基本上假设我同时提交GET(spark.read.parquet)和PUT(S3 dist cp)。它将把它们放入一个队列并按顺序执行操作,这样就不会有冲突。然而,因为我们必须考虑最终的一致性模型,我们可以有一些情况,我们在(稍微之前)或在我们的阅读过程之前写出来。在为该bucket重新创建缓存之前,我们将拥有数据的早期版本。我认为这是正确的理解?我也不明白路径是如何过时的?我已经回答了我自己的最后一个问题,看起来可能是因为我们不能保证在新的存储桶中有相同的分区/子目录,对吗?S3提供了列表不一致性:列表通常滞后于创建/删除的文件,这破坏了spark,和更新不一致性:如果覆盖现有文件,然后尝试读取它,则读取器可能会获取旧数据。Spark中没有任何东西期望这样,所以基本上假设我同时提交一个GET(Spark.read.parquet)和PUT(s3 dist cp)。它将把它们放入一个队列并按顺序执行操作,这样就不会有冲突。然而,因为我们必须考虑最终的一致性模型,我们可以有一些情况,我们在(稍微之前)或在我们的阅读过程之前写出来。在为该bucket重新创建缓存之前,我们将拥有数据的早期版本。我认为这是正确的理解?我也不明白路径是如何过时的?我已经回答了我自己的最后一个问题,看起来可能是因为我们不能保证在新的存储桶中有相同的分区/子目录,对吗?S3提供了列表不一致性:列表通常滞后于创建/删除的文件,这破坏了spark,和更新不一致性:如果覆盖现有文件,然后尝试读取它,则读取器可能会获取旧数据。Spark中没有任何东西期望这样