Я столкнулся с проблемами при попытке синтаксического анализа значений, разделенных Thorn (þ или «\ xfe»).
Пример данных:
Time˛UserId˛AdUnitId˛CustomTargeting˛RefererURL˛Browser˛OS˛TimeUsec2˛KeyPart˛RequestedAdUnitSizes˛MobileDevice˛ImpressionId˛LineItemId˛IsCompanion
2020-06-22-20:23:38˛abc1234˛01234˛key1=value1;key2=value2;key3=value3˛https://example.com/example˛Google Chrome Any.Any˛Android˛012345˛abc-defg˛100x50˛˛1-0˛123456˛false
Чтобы обеспечить настройку проблемы, вот что у меня есть и что я пробовал:
Что у меня есть:
- Я дал сжатые файлы в S3 (пример имени файла -
filename_20200101.gz
), который содержит один файл, разделенный шипами. - Данные имеют метаданные как
Content-Type - application/octet-stream
- Я проверил содержимое данных и обнаружил, что кодировка не
utf-8
, его latin-1
(и может быть проанализирован с использованием других кодировок, таких как ISO-8859-1
), поэтому, используя следующий фрагмент кода, я мог правильно читать данные на моем локальном компьютере (без части кодирования он возвращает всю строку с вопросительными знаками).
import pandas as pd
df = pd.read_csv("/path/filename_20200101.gz", delimiter='þ',engine='python', header=0, encoding='latin-1')
Что я пробовал:
- Я создал собственный классификатор csv, в котором я выбрал разделитель
Other - þ
, как показано ниже.
- I have created the following grok based custom classifier, with all the fields and delimiter
%{DATA:time}þ%{DATA:user_id}þ%{DATA:ad_unit_id}þ%{DATA:custom_targeting}þ%{DATA:referer_url}þ%{DATA:browser}þ%{DATA:os}þ%{DATA:time_usec_2}þ%{DATA:key_part}þ%{DATA:requested_ad_unit_sizes}þ%{DATA:mobile_device}þ%{DATA:impression_id}þ%{DATA:line_item_id}þ%{DATA:is_companion}
- Из-за проблемы с кодировкой, с которой я столкнулся, я изменил метаданные объекта S3 и добавил
Content-Encoding - GZIP
и пробовал разные варианты Content-Type
, например, Content-Type - text/html; charset=latin-1
, Content-Type - text/csv; charset=latin-1
, Content-Type - text/plain; charset=latin-1
, Content-Type - application/octet-stream; charset=latin-1
.
Тем не менее, я не могу найти способ проанализировать эти данные с помощью склеивающего робота, любая помощь по этому поводу будет отличной.
Кроме того, я чувствую, что мой шаблон Grok может быть неправильным, но тестирование его на https://grokdebug.herokuapp.com/, похоже, разбирается нормально.
Заранее большое спасибо