2015-02-23 59 views

回答

2

是的,最簡單的方法是通過反射來推斷它。 See the SparkSQL documentation然後單擊Java選項卡。然後,閱讀標記

Inferring the Schema Using Reflection

編輯從評論

我不知道的是,Java API的作爲很容易充實的一個階,如此看來,以巢類型,你的節可能需要自己構建模式:

//First create the address 
List<StructField> addressFields = new ArrayList<StructField>(); 
fields.add(DataType.createStructField("street", DataType.StringType, true));  
StructType addressStruct = DataType.createStructType(addressFields) 

//Then create the person, using the address struct 
List<StructField> personFields = new ArrayList<StructField>(); 
fields.add(DataType.createStructField("name", DataType.StringType, true)); 
fields.add(DataType.createStructField("age", DataType.IntType, true)); 
fields.add(DataType.createStructField("address", addressStruct, true)); 

StructType schema = DataType.createStructType(fields); 
+1

該部分使用具有簡單數據類型的Java Bean。如果Person類(在示例中)具有名爲Address的自定義類型的屬性,該怎麼辦? – malli 2015-02-23 18:16:36

+0

你試過了嗎?它推斷整個過程。 – 2015-02-23 18:25:04

+0

是的,我試過了。我得到「scala.MatchError:類[地址;(類java.lang.Class)」 – malli 2015-02-24 02:17:57