JKn*_*ght 6 apache-spark parquet apache-spark-sql
我想在S3上将一个大型排序表保存到Parquet,然后读取它并使用Sorted Merge Join策略将其连接到另一个大型排序表.
问题是:即使我事先在连接键上对这些表进行排序,一旦我将它们保存到Parquet,它们似乎就会丢失有关其排序的信息.反正有没有提示Spark,下次我读它们时不需要使用它们?
我一直在Spark 1.5上尝试这个,我不断得到SQL EXPLAIN
计划:
[== Physical Plan ==]
[TungstenProject [pos#28400,workf...#28399]]
[ SortMergeJoin [CHROM#28403,pos#28400], [CHROM#28399,pos#28332]]
[ TungstenSort [CHROM#28403 ASC,pos#28400 ASC], false, 0]
[ TungstenExchange hashpartitioning(CHROM#28403,pos#28400)]
[ ConvertToUnsafe]
[ Scan ParquetRelation[file:/....sorted.parquet][pos#284....8424]]
[ TungstenSort [CHROM#28399 ASC,pos#28332 ASC], false, 0]
[ TungstenExchange hashpartitioning(CHROM#28399,pos#28332)]
[ ConvertToUnsafe]
[ Scan ParquetRelation[file:....exploded_sorted.parquet][pos#2.....399]]
Run Code Online (Sandbox Code Playgroud)
你可以在那里看到额外的TungstenExchange和TungstenSort阶段,即使这个连接在两个表上,这些表orderBy
在保存到Parquet之前在连接键上排序.