我正在做一個探索性數據分析與hadoop作業歷史文件日誌數據。 下面給出的是用於分析使用sparksql訪問嵌套json數據的子字段
{"type":"AM_STARTED","event":{"org.apache.hadoop.mapreduce.jobhistory.AMStarted":{"applicationAttemptId":"appattempt_1450790831122_0001_000001","startTime":1450791753482,"containerId":"container_1450790831122_0001_01_000001","nodeManagerHost":"centos65","nodeManagerPort":52981,"nodeManagerHttpPort":8042}}}
我只需要選擇喜歡applicationAttemptId,開始時間,事件的數據筒子值
org.apache.hadoop.mapreduce.jobhistory樣本數據.AMStarted
我嘗試下面的簡單選擇查詢
val out=sqlcontext.sql("select event.org.apache.hadoop.mapreduce.jobhistory.AMStarted.applicationAttemptId from sample")
但將下面的錯誤
org.apache.spark.sql.analysisException:在org.apache.hadoop.mapreduce.jobhistory.AMStarted.applicationAttemptId
沒有這樣的結構字段的有機萃不幸的是,數據字段這個樣子的「org.apache.hadoop.mapreduce.jobhistory.AMStarted」
我操縱的數據自己這樣org_apache_hadoop_mapreduce_jobhistory.AMStarted並試圖像下面這一個
相同的查詢3210val out=sqlcontext.sql("select event.org_apache_hadoop_mapreduce_jobhistory_AMStarted.applicationAttemptId from sample")
現在我可以訪問AMStarted的子字段。但這不是正確的方式, 有沒有辦法在不操作數據的情況下這樣做。