Ich mache eine explorative Datenanalyse mit Protokolldaten von Hadoop-Jobverlaufsdateien. unten ist die Probendaten für die AnalyseZugriff auf untergeordnete Felder einer verschachtelten JSON-Daten mit Hilfe von 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}}}
Ich muss nur die untergeordneten Werte wie applicationAttemptId auswählen, Startzeit, containerId der
org.apache.hadoop.mapreduce.jobhistory Ereignis verwendet .AMStarted
i die unten einfache Auswahlabfrage versucht
val out=sqlcontext.sql("select event.org.apache.hadoop.mapreduce.jobhistory.AMStarted.applicationAttemptId from sample")
aber es führt den unten Fehler
org.apache.spark.sql.analysisException: Keine solche struct Feld org in org.apache.hadoop.mapreduce.jobhistory.AMStarted.applicationAttemptId
leider das Datenfeld aussehen wie dieses „org.apache.hadoop.mapreduce.jobhistory.AMStarted“
i manipuliert, um die selbst Daten wie diese org_apache_hadoop_mapreduce_jobhistory.AMStarted und versucht, die gleiche Abfrage wie diese unter
Jetzt kann ich auf die untergeordneten Felder von AMStarted zugreifen. aber es ist nicht der richtige Weg, Gibt es eine Möglichkeit, dies zu tun, ohne die Daten zu manipulieren.