2017-02-24 19 views
2

我有一個目錄像這裏麪包含了JSON文件JSON模式顯示與文件架構以及目錄名

/user/myuser/check/database=helloworld/table=program/proc_dt=2017-04-04/part-00000 

JSON文件架構內容如下:

hadoop fs -cat /user/myuser/check/database=helloworld/table=program/proc_dt=2017-04-04/part-00000 

{「工作類型「:」Producer「,」person_id「:」7d422349554「,」order「:」1「,」entity_id「:」123「} {」job_type「:」Producer「,」person_id「:」af7dc39bc「,」order 「:」3「,」entity_id「:」f2323「}

當我嘗試使用下面的命令從json文件讀取模式時,我也在模式中獲取目錄的名稱。

import scala.collection.mutable.ArrayBuffer 
var flattenedDatasetPath = "/user/myuser/check/database=helloworld/table=program/proc_dt=2017-04-04/" 
var flattenedFileSchemaList = ArrayBuffer[String]() 
val flattenedDataSetDF = sqlContext.read.json(flattenedDatasetPath) 
var fieldNamesArr=flattenedDataSetDF.schema.fields 
for(f<-fieldNamesArr){ 
    println(f.name) 
    flattenedFileSchemaList+=f.name 
} 

這是我得到的

entity_id 
job_type 
order 
person_id 
database 
table 
proc_dt 

爲什麼目錄名來作爲模式的一部分輸出?

回答

1

這是因爲spark.sql.sources.partitionColumnTypeInference.enabled在默認情況下設置爲true

sqlContext.setConf("spark.sql.sources.partitionColumnTypeInference.enabled", "false") 

分區列的數據類型自動推斷。 目前支持數字數據類型和字符串類型。有時 用戶可能不想自動推斷分區列的數據類型。對於這些用途的情況下,自動類型 推斷可以通過 被配置spark.sql.sources.partitionColumnTypeInference.enabled,這是 默認爲true。當禁用類型推斷時,用於分區列的字符串類型將爲 。

Apache doc

+0

該物業是爲了隱藏分區山坳的數據類型。我有火花1.5.2版本。有什麼辦法可以隱藏目錄發現。根據該文檔,它將在1.6版本中發佈。 「從Spark 1.6.0開始,默認情況下分區發現僅在給定路徑下找到分區。」 – DebD

+0

它也支持1.5.2。我添加的鏈接是相同的版本。 – mrsrinivas

+0

我嘗試將屬性設置爲false,但仍然讀取目錄名稱。它在文檔中提到屬性「spark.sql.sources.partitionColumnTypeInference.enabled」適用於數據類型,但不適用於col發現。 – DebD