Анализ данных DFP с помощью Glue Crawler со значениями, разделенными шипами - PullRequest
0 голосов
/ 11 июля 2020

Я столкнулся с проблемами при попытке синтаксического анализа значений, разделенных 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')

Что я пробовал:

  1. Я создал собственный классификатор csv, в котором я выбрал разделитель Other - þ, как показано ниже. Custom CSV Classifier
  2. 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}
  1. Из-за проблемы с кодировкой, с которой я столкнулся, я изменил метаданные объекта 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/, похоже, разбирается нормально.

Заранее большое спасибо

...