Query Ein verschachteltes Array in Parkettaufzeichnungen

ch versuche verschiedene Möglichkeiten, einen Datensatz in einem Array von Datensätzen abzufragen und die vollständige Zeile als Ausgabe anzuzeige

Ich weiß nicht, welches verschachtelte Objekt den String "pg" hat. Aber ich möchte nach einem bestimmten Objekt fragen. Ob das Objekt "pg" hat oder nicht. Wenn "pg" existiert, möchte ich diese komplette Zeile anzeigen. Wie schreibe ich "spark sql query" für verschachtelte Objekte ohne Angabe des Objektindex. Ich möchte also nicht den Index von children.name @ verwende

Meine Avro-Aufzeichnung:

{
"name": "Parent",
"type":"record",
"fields":[
    {"name": "firstname", "type": "string"},

    {
        "name":"children",
        "type":{
            "type": "array",
            "items":{
                        "name":"child",
                        "type":"record",
                        "fields":[
                            {"name":"name", "type":"string"}
                        ]
                    }
            }
    }
]
}

Ich verwende den Spark-SQL-Kontext, um den gelesenen Datenrahmen abzufragen. Also, wenn die Eingabe @ i

Row no   Firstname Children.name
    1    John       Max
                    Pg
    2    Bru        huna
                    aman

Output sollte poq 1 zurückgeben, da es eine Zeile enthält, in der ein Objekt von children.name pg ist.

val results = sqlc.sql("SELECT firstname, children.name FROM nestedread where children.name = 'pg'")
results.foreach(x=> println(x(0), x(1).toString))

Die obige Abfrage funktioniert nicht. aber es funktioniert, wenn ich Kinder abfrage [1] .name.

Ich möchte auch wissen, ob ich eine Reihe von Datensätzen filtern und dann explodieren kann. Anstatt zuerst zu explodieren und eine große Anzahl von Zeilen zu erstellen und dann zu filtern.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage