Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/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-partitioned parquet-在分区键上查询不同的值需要很多时间_Apache Spark_Distinct_Parquet_Partition - Fatal编程技术网

Apache spark Spark-partitioned parquet-在分区键上查询不同的值需要很多时间

Apache spark Spark-partitioned parquet-在分区键上查询不同的值需要很多时间,apache-spark,distinct,parquet,partition,Apache Spark,Distinct,Parquet,Partition,我在S3中用日期字段“dt”划分了一个拼花地板(在我的拼花地板的基本目录中,有多个“dt=”子目录) 执行计划很快就得到了,找到了796个分区: == Parsed Logical Plan == Deduplicate [dt#310] +- Project [dt#310] +- Relation[,... 287 more fields] parquet == Analyzed Logical Plan == dt: date Deduplicate [dt#310] +- Pro

我在S3中用日期字段“dt”划分了一个拼花地板(在我的拼花地板的基本目录中,有多个“dt=”子目录)

执行计划很快就得到了,找到了796个分区:

== Parsed Logical Plan ==
Deduplicate [dt#310]
+- Project [dt#310]
   +- Relation[,... 287 more fields] parquet

== Analyzed Logical Plan ==
dt: date
Deduplicate [dt#310]
+- Project [dt#310]
   +- Relation[<>,... 287 more fields] parquet

== Optimized Logical Plan ==
Aggregate [dt#310], [dt#310]
+- Project [dt#310]
   +- Relation[<>,... 287 more fields] parquet

== Physical Plan ==
*(2) HashAggregate(keys=[dt#310], functions=[], output=[dt#310])
+- Exchange hashpartitioning(dt#310, 200)
   +- *(1) HashAggregate(keys=[dt#310], functions=[], output=[dt#310])
      +- *(1) FileScan parquet [dt#310] Batched: true, Format: Parquet, Location: InMemoryFileIndex[s3://my_s3_bucket/my_parquet_location], PartitionCount: 796, PartitionFilters: [], PushedFilters: [], ReadSchema: struct<>
在给出结果“796”之前,执行需要很多分钟


真奇怪。我不明白Spark对我的问题做了什么。我做错什么了吗?对于分区键的查询,我希望能立即得到结果。

我不明白你怎么会期望它是即时的?对于不同的情况,你没有给出任何标准——记住这一点。嗨,拉维。对不起,我不明白你在“给出任何标准”中的意思。distinct()在select(dt)之后调用,这意味着我要查找dt的所有可能值,这基本上应该与列出所有可能的分区相同。当Spark计算执行计划时,所有分区的列表可以在几毫秒内完成。
给出任何标准
-->我的意思是给出一些过滤条件以利用分区(如果有的话)。确定你有大量的ORC文件。避免读取/扫描的文件碎片。尝试将原始文件放在HDFS上,看看s3是否是速度缓慢的原因--顺便说一句,很抱歉回信太晚了。你好@Averell。你是否指定了一个“basePath”选项,使“dt”列对应于分区?你好@baitmbarek,很抱歉我错过了你的消息。我尝试了使用和不使用“basePath”选项,但我看不出有什么不同。我还可以看到,在计划中,“PushedFilters:[]”是一个空数组。不确定这是不是出了什么问题
== Parsed Logical Plan ==
Deduplicate [dt#310]
+- Project [dt#310]
   +- Relation[,... 287 more fields] parquet

== Analyzed Logical Plan ==
dt: date
Deduplicate [dt#310]
+- Project [dt#310]
   +- Relation[<>,... 287 more fields] parquet

== Optimized Logical Plan ==
Aggregate [dt#310], [dt#310]
+- Project [dt#310]
   +- Relation[<>,... 287 more fields] parquet

== Physical Plan ==
*(2) HashAggregate(keys=[dt#310], functions=[], output=[dt#310])
+- Exchange hashpartitioning(dt#310, 200)
   +- *(1) HashAggregate(keys=[dt#310], functions=[], output=[dt#310])
      +- *(1) FileScan parquet [dt#310] Batched: true, Format: Parquet, Location: InMemoryFileIndex[s3://my_s3_bucket/my_parquet_location], PartitionCount: 796, PartitionFilters: [], PushedFilters: [], ReadSchema: struct<>
distinctDates.count()