Предыстория
Мы хотим перекладывать паркет-файлики из одной системы в другую. Выложили их на s3. Все, можно забирать. Казалось бы, что может пойти не так?
Но этот процесс прошел несколько итераций, прежде чем я сказала "все ок" 😊
1️⃣
Проблема: Illegal Parquet type: FIXED_LEN_BYTE_ARRAY
Смысл: паркет не умеет читать тип FixedString из кх
Решение: удаляем столбец или сохраняем в формате String
2️⃣
Проблема: Required field 'codec' was not present!
Смысл: связано с несопоставимыми алгоритмами компрессии файлов
Решение: используем другой алгоритм (н-р, Snappy)
3️⃣
Проблема: Строковые типы отображаются вот так: [57 65 62 4B 69 74]
Смысл: отображается в бинарном виде
Решение:
SELECT unhex(regexp_replace(StartURL, ' ', ''))
(или без unhex)
Но это неудобно все преобразовывать на этапе чтения
4️⃣
Проблема: делаю printSchema() и вижу, что все строковые поля имеют тип binary
Решение: сохраняем в string
5️⃣
Проблема: date в формате 20031
Смысл: это количество дней от 1970-01-01
Решение:
df.withColumn(
'new_date',
F.date_from_unix_date(date)
)
6️⃣
Проблема: функция date_from_unix_date появилась в версии 3.5.0, а у нас ниже
Решение: делаем примерно так и кладем все в string на этапе записи
SELECT date_add('1970-01-01', 20031) AS new_date
Ура😑
