Не дозаписываются данные в таблицу, в apache spark
Есть данные следующего вида:
``` [ {'count': 309,
'next': 'some_url',
'previous': None,
'results': [{'assigned_to': 44,
'category': 'Unused',
'comments': None,
'completed_ts': None,
'created': '2019-05-27T05:14:22.306843Z',
'description': 'Pollution',
'display_name': {'admin': False,
'business_name': 'Test Business',
'contact_number': 'some_number',
'dob': None,
'email': 'some_mail',
'emp_id': None,
'first_name': 'Ali'}}]},......}] ```
Данные, по API, парсятся ежедневно и необходимо их записывать в паркет и добавлять в таблицу. Причем в разные дни структура json может отличаться. Если записывать таким образом, то все отрабатывает успешно
```df = self.spark.read.option('multiline', 'true') \
.json(self.spark.sparkContext.parallelize(([json.dumps(data)])))
df.write.saveAsTable(f'{self.database}.{self.entity}',
path=self.save_path,
mode='overwrite',
format='parquet')
```
Но каждый раз делать overwrite не представляется возможным, но если попытаться добавить данные, т.е. сделать mode='append', то будет ошибка что не подходит схема для json
Ответы (1 шт):
Если кратко, то схема может быть примерно следующая:
Получаем данные из API и записываем во временный parquet-файл.
Читаем данные одновременно из целевого parquet-файла и временного с использованием опции
mergeSchema.df = spark.read.option("mergeSchema", "true").parquet(data_path)Записываем всё, что получилось, на место целевого parquet-файла.
