Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark Spark进行昂贵的S3API调用_Apache Spark_Amazon S3_Databricks - Fatal编程技术网

Apache spark Spark进行昂贵的S3API调用

Apache spark Spark进行昂贵的S3API调用,apache-spark,amazon-s3,databricks,Apache Spark,Amazon S3,Databricks,我有一个spark作业,它接收约100k个文件的列表,并且每10分钟调用一次。这些文件在s3中。路径如下所示: s3://<bucket>/<folder>/<file_name> 在幕后,spark似乎对每个文件都进行了列表和头部API调用。这是相当浪费的,因为这些是文件而不是目录,并且由于作业的性质,保证存在。我查看了spark代码库,似乎这种行为是。有没有办法将spark配置为直接进行GET调用和跳过list/head调用 这是相当浪费的,因为这些文件

我有一个spark作业,它接收约100k个文件的列表,并且每10分钟调用一次。这些文件在s3中。路径如下所示:

s3://<bucket>/<folder>/<file_name>
在幕后,spark似乎对每个文件都进行了列表和头部API调用。这是相当浪费的,因为这些是文件而不是目录,并且由于作业的性质,保证存在。我查看了spark代码库,似乎这种行为是。有没有办法将spark配置为直接进行GET调用和跳过list/head调用

这是相当浪费的,因为这些文件不是目录,并且由于作业的性质而保证存在

这里的问题是,文件系统层不知道“作业的性质”,所以它有时会自己进行探测

看起来InMemoryFileIndex.scala效率很低;除了HDFS的一些硬编码位之外,它还进行自己的树遍历,并且似乎重新扫描了它刚刚列出的所有文件


是的,正如开源项目所说,还有改进的余地。但是,由于他们也倾向于说“请提交补丁”

我不确定[databricks]带来了什么,但我认为你需要调查一下如何获得补丁“s3a://'协议在您的Spark应用程序中工作。您确定
mergeSchema
选项不需要额外的I/O来确保Spark事先实际合并架构吗?只是说…记住S3不是一个文件系统;它是一个对象存储,您使用它是因为它便宜并且内置了地理应用程序,但是您不能期望尝试用它来模拟文件系统的“连接器”具有良好的性能。即使使用HDF,读取一堆小文件也会带来灾难——Hadoop和Spark是为大数据而构建的,即一些可以拆分为逻辑块的大文件。Databrick声称他们自己的S3连接器中有“优化”,这与EMR连接器不同(
S3:
)还有Hadoop连接器(
s3a:
),所以。。。答案可能在他们的文档中,因为那个连接器不是开源的AFAIK。
df = spark.read.option("mergeSchema", "true").schema(schema).parquet(*files)