邏輯和物理計劃如何工作時讀蜂巢分割槽表在獸人pyspark dataframe嗎

a1107849370發表於2018-11-29

我已經建立了一個火花dataframe閱讀csv hdfs的位置。

emp_df = spark.read.format("com.databricks.spark.csv") \  .option("mode", "DROPMALFORMED") \  .option("header", "true") \  .option("inferschema", "true") \  .option("delimiter", ",").load(PATH_TO_FILE)

並儲存這個dataframe蜂巢paritioned獸人使用partitionBy方法表

emp_df.repartition(5, 'emp_id').write.format('orc').partitionBy("emp_id").saveAsTable("UDB.temptable")

當我閱讀此表如下方法如果我看看邏輯和物理計劃,似乎它已經完全過濾的資料使用分割槽鍵列:

emp_df_1 = spark.sql("select * from UDB.temptable where emp_id ='6'")emp_df_1.explain(True)***************************************************************************== Parsed Logical Plan =='Project [*]
+- 'Filter ('emp_id = 6)
   +- 'UnresolvedRelation `UDB`.`temptable`== Analyzed Logical Plan ==emp_name: string, emp_city: string, emp_salary: int, emp_id: intProject [emp_name#7399, emp_city#7400, emp_salary#7401, emp_id#7402]+- Filter (emp_id#7402 = cast(6 as int))
   +- SubqueryAlias temptable      +- Relation[emp_name#7399,emp_city#7400,emp_salary#7401,emp_id#7402] orc== Optimized Logical Plan ==Filter (isnotnull(emp_id#7402) && (emp_id#7402 = 6))+- Relation[emp_name#7399,emp_city#7400,emp_salary#7401,emp_id#7402] orc== Physical Plan ==*(1) FileScan orc udb.temptable[emp_name#7399,emp_city#7400,emp_salary#7401,emp_id#7402] Batched: true, Format: ORC, Location: PrunedInMemoryFileIndex[hdfs://pathlocation/database/udb...., PartitionCount: 1, PartitionFilters: [isnotnull(emp_id#7402), (emp_id#7402 = 6)], PushedFilters: [], ReadSchema: struct<emp_name:string,emp_city:string,emp_salary:int>***************************************************************************

而如果我讀這個dataframe透過絕對hdfs路徑位置,似乎不能夠過濾資料使用分割槽鍵列:

emp_df_2 = spark.read.format("orc").load("hdfs://pathlocation/database/udb.db/temptable/emp_id=6")emp_df_2.explain(True)******************************************************************************== Parsed Logical Plan ==Relation[emp_name#7411,emp_city#7412,emp_salary#7413] orc== Analyzed Logical Plan ==emp_name: string, emp_city: string, emp_salary: intRelation[emp_name#7411,emp_city#7412,emp_salary#7413] orc== Optimized Logical Plan ==Relation[emp_name#7411,emp_city#7412,emp_salary#7413] orc== Physical Plan ==*(1) FileScan orc [emp_name#7411,emp_city#7412,emp_salary#7413] Batched: true, Format: ORC, Location: InMemoryFileIndex[hdfs://pathlocation/data/database/udb.db/tem..., PartitionFilters: [], PushedFilters: [], ReadSchema: struct<emp_name:string,emp_city:string,emp_salary:int>********************************************************************************

你能幫我瞭解邏輯和物理計劃的情況下?


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559515/viewspace-2222178/,如需轉載,請註明出處,否則將追究法律責任。

相關文章