1

Я занимаюсь аналитическим анализом данных с данными журнала событий истории заказов. Ниже приведены это выборочные данные, используемые для анализаДоступ к дочерним полям вложенных данных 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. но это неправильный способ сделать это, Есть ли способ сделать это без манипуляции данными.

ответ

1

Проведя некоторое время на поиск решения, вы получили простую идею использования обратных тиков, поскольку цитаты в названии поля сделали трюк для меня.

`org.apache.hadoop.mapreduce.jobhistory`.AMStarted 

И тогда запрос работает как шарм,

val out=sqlcontext.sql("select event.`org.apache.hadoop.mapreduce.jobhistory.AMStarted'.applicationAttemptId from sample") 
Смежные вопросы