Согласно вашему примеру, вы хотите выполнить поворот, а затем преобразовать ваши данные в pandas dataframe.
Шаги:
- Соберите всех вас jsons в 1 большой массив данных,
- Поверните ваши данные,
- превратите их в кадр данных pandas
Попробуйте что-то вроде этого:
from functools import reduce
def jsons_to_pdf(all_paths):
# Create a big dataframe from all the jsons
sdf = reduce(
lambda a,b : a.union(b),
[
sqlContext.read.json(path)
for path
in all_paths
]
)
# select and pivot your data
pivot_df = sdf.select(
"imoNo",
"logTimestamp",
"payloadTimestamp",
F.explode("datapoints").alias("datapoint")
).groupBy(
"imoNo",
"logTimestamp",
"payloadTimestamp",
).pivot(
"datapoint.id"
).sum("datapoint.value")
# convert to a pandas dataframe
pdf = pivot_df.toPandas()
return pdf
Согласно вашему комментарию, вы можете заменить список файлов all_paths
на общий путь и изменить способ создания sdf
:
all_paths = 'abc/*/*/*' # 3x*, one for year, one for month, one for day
def jsons_to_pdf(all_paths):
# Create a big dataframe from all the jsons
sdf = sqlContext.read.json(path)
Это, несомненно, увеличит производительность.