Como renomear campos em um DataFrame correspondente ao JSON aninhado

Estou tentando processar eventos JSON recebidos em um aplicativo móvel (como cliques etc.) usandospark 1.5.2. Existem várias versões de aplicativos e a estrutura dos eventos varia entre as versões.

Digamos que a versão 1 tenha a seguinte estrutura:

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

E outra versão tem a seguinte estrutura:

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

Quero poder criar um único quadro de dados para a estrutura e executar algumas consultas.

Estou criando dois quadros de dados diferentes para cada estrutura usando ofilter função. Agora, preciso poder renomear as colunas para executar a operação de união nos dois quadros de dados.

Estou usando:

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

Mas isso não funciona. Como faço para conseguir isso?

questionAnswers(2)

yourAnswerToTheQuestion