Я занимаюсь аналитическим анализом данных с данными журнала событий истории заказов. Ниже приведены это выборочные данные, используемые для анализаДоступ к дочерним полям вложенных данных json с использованием sparksql
{"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, STARTTIME, containerId события
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 и попробовал тот же запрос, как этот ниже
val out=sqlcontext.sql("select event.org_apache_hadoop_mapreduce_jobhistory_AMStarted.applicationAttemptId from sample")
Теперь я могу получить доступ к дочерним полям AMStarted. но это неправильный способ сделать это, Есть ли способ сделать это без манипуляции данными.