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?