Cómo cambiar el nombre de los campos en un DataFrame correspondiente a JSON anidado

Estoy tratando de procesar eventos JSON recibidos en una aplicación móvil (como clics, etc.) usandospark 1.5.2. Existen múltiples versiones de aplicaciones y la estructura de los eventos varía según las versiones.

Digamos que la versión 1 tiene la siguiente estructura:

{
    "timestamp": "",
    "ev": {
                "app": {
                    "appName": "XYZ",
                    "appVersion": "1.2.0"
                }
                "device": {
                    "deviceId": "ABC",
                    ...
                }
                ...
             }
}

Y otra versión tiene la siguiente estructura:

{
    "timestamp": "",
    "ev": {
                "_a": {
                    "name": "XYZ",
                    "version": "1.3.0"
                }
                "_d": {
                    "androidId": "ABC",
                    ...
                }
                ...
             }
}

Quiero poder crear un único marco de datos para la estructura y realizar algunas consultas.

Estoy creando dos marcos de datos diferentes para cada estructura usando elfilter función. Ahora necesito poder cambiar el nombre de las columnas para realizar la operación de unión en los dos marcos de datos.

Estoy usando:

df.withColumnRenamed("ev.app", "ev._a").withColumnRenamed("ev.device", "ev._d");

Pero esto no funciona. ¿Cómo logro esto?

Respuestas a la pregunta(2)

Su respuesta a la pregunta