Forenkle indtagelse af indgående data med dynamiske parameteriserede datasæt i AWS Glue DataBrew

Kildeknude: 874968

Når dataanalytikere og dataforskere forbereder data til analyse, er de ofte afhængige af periodisk genererede data produceret af upstream-tjenester, såsom mærkning af datasæt fra Amazon SageMaker Ground Truth eller Omkostnings- og forbrugsrapporter fra AWS Billing og Cost Management. Alternativt kan de regelmæssigt uploade sådanne data til Amazon Simple Storage Service (Amazon S3) til yderligere behandling. I dette indlæg demonstrerer vi, hvordan du kan forberede data til filer, der allerede er i din S3-bøtte samt nye indgående filer ved hjælp af AWS Glue Data Brew, en visuel dataforberedelsestjeneste, der giver over 250 transformationer til rensning og normalisering af data. Den nyligt lancerede dynamiske datasæt Funktionen i DataBrew giver dig mulighed for effektivt at genbruge sådanne datasæt ved at bruge en enkelt opskrift i flere kørsler af det samme job. I dette indlæg viser jeg, hvordan man gør dette og fremhæver andre use cases for funktionen dynamiske datasæt.

Løsningsoversigt

I dette indlæg bruger jeg DataBrew til at skabe tilbagevendende dataforberedelsesjob, der kan bruge dynamisk opdaterede data fra Amazon S3. Vi kan opnå en sådan funktionalitet ved at definere dynamiske DataBrew-datasæt. Dynamiske datasæt er parameteriserede datasæt, hvor parametre evalueres på datasættets indlæsningstidspunkt. DataBrew indlæser datasæt under interaktiv session initialisering, så de kan bruges til visuelt at konstruere en opskrift baseret på en stikprøve af data. Datasæt indlæses også når job løb. Det kan enten være et opskriftsjob, hvor en opskrift påføres hele datasættet for at producere ønskede output, eller et profiljob, der udfører analyse af inputdataene for bedre at forstå initialkvalitet og relationer mellem kolonner. Derfor kan de valgte filer være forskellige afhængigt af tidspunktet for en session og job, deraf udtrykket dynamiske datasæt.

Efter jeg har defineret mit dynamiske datasæt, opretter jeg et DataBrew-projekt, så jeg kan starte en interaktiv session og definere min dataforberedelsesopskrift. Når opskriften er færdig, opretter og planlægger jeg et opskriftsjob, så fremtidige data også behandles, efterhånden som de bliver tilgængelige i Amazon S3.

Forudsætninger

Hvis du gerne vil følge med i dette indlæg, har du brug for følgende forudsætninger:

Use case for dynamiske datasæt

Til denne brugssag skal jeg rydde op i rådata, der er skrevet i en S3-bøtte i CSV-format hver dag, muligvis flere gange. Disse filer er metadata om Mars-billeder taget af Perseverance Rover. Lad os antage, at vi skal forberede disse data til at blive brugt i billedklassificeringstræning, der kører dagligt og bruger alle data fra de seneste 24 timer.

Følgende skærmbillede viser, hvordan eksempelfilerne ser ud, når de uploades til en S3-bøtte.

Hvert filnavn indeholder oplysninger om den dato og det klokkeslæt, det blev oprettet, og jeg vil gerne have disse oplysninger tilgængelige i mine outputdata. Derudover indeholder denne mappe ikke kun CSV-filer med metadata, som jeg har brug for, men også en anden CSV-fil: image-catalogue.csv, som jeg vil udelukke fra min behandling.

Opret et DataBrew-datasæt

Vi opretter et DataBrew-datasæt til disse S3-filer, der skal afhentes dagligt.

  1. På DataBrew-konsollen skal du vælge datasæt.
  2. Vælg Tilslut nyt datasæt.
  3. Til Datasætnavn, gå ind daily-images-info.
  4. Naviger til mappen med vores eksempelfiler.

Hvis vi kun skal behandle alle filerne én gang, kan vi vælge hele mappen og bruge S3-placeringen s3://dynamic-datasets/Mars2020-Image-Catalogue/Mars2020-Image-Catalogue. Men til vores brugssag har vi kun brug for filer for den sidste dag, så det virker ikke. Vi skal definere de rigtige parametre, så vores datasæt kun er forbundet med de nyeste filer.

Lad os starte med at vælge en bestemt filplacering og parametrere den ved at erstatte den skiftende del, der indeholder dato og klokkeslæt, med den tilsvarende parameter.

  1. Vælg en enkelt fil, der slutter med _metadata.csv.
  2. I placeringsfeltet skal du fremhæve dato og klokkeslæt.
  3. Vælg i kontekstmenuen, der vises Opret tilpasset parameter.

Dette giver dig mulighed for at definere en parameter, der skal bruges som erstatning for den tidligere fremhævede del af S3-lokationen.

  1. Til Parameternavn, gå ind file_creation_time.
  2. Til Type¸ vælg Dato.

Vi er nødt til at fortælle DataBrew, hvilket dato- og tidsformat der bruges i vores S3-sti. Det Foruddefineret format rullemenuen indeholder en liste over populære formater, men fordi filnavne i vores tilfælde bruger den ikke-standardiserede understregning (_) for at adskille mellem timer, minutter og sekunder, skal vi definere det rigtige format.

  1. Til datoformat, Vælg Tilpasset.
  2. Indtast yyyy-MM-dd-hh_mm_ss.

Locale indstillingen kan være nyttig, hvis en del af S3-stien, der parametreres, ikke kun indeholder den numeriske del af datoen, men også tekstdele som et kort eller langt månedsnavn på et andet sprog end engelsk.

Formatér forhåndsvisning sektion giver dig mulighed for at kontrollere, om det indtastede datoformat producerer en streng i den forventede form.

  1. Vælg Opret.

Vores nye parameter tilføjes i S3-placeringsfeltet i stedet for den bestemte dato og klokkeslæt, og alle matchende filer, der indeholder dato og klokkeslæt i deres navn, er valgt i Matchende filer afsnit. Dette giver os 107 matchende filer (på tidspunktet for skrivning af dette indlæg) inden for hele Mars-2020-Image-Catalogue mappe.

Vi har dog kun brug for filer fra den sidste dag, så lad os ændre vores parameter for at afspejle dette krav.

  1. Vælg ellipsen ud for parameternavnet i venstre rude, og vælg Redigere.

Rullelisten for Tidsinterval indeholder flere relative tidsintervaller, som f.eks Sidste år, Sidste uge, og så videre.

  1. Vælg Sidste 24 timer.
  2. Type Tilføj som kolonne.

Vi ønsker at bevare disse oplysninger, når data fra flere filer kombineres. Denne mulighed opretter en kolonne med navnet file_creation_date når vores datasæt er indlæst.

  1. Vælg Gem.

Du er ikke begrænset af de tidsintervaller, der er angivet i Tidsinterval drop-down. Hvis du har brug for at definere dit eget tidsinterval, skal du vælge Tilpasset og vælg dit datointerval (Fra, Til, eller begge). Du kan en absolut dato og klokkeslæt værdier, som vist i følgende skærmbillede.

Alternativt kan du bruge en relativ dato. Disse datoer er i forhold til, hvornår filerne indlæses af DataBrew, enten under initialisering af interaktive sessioner eller under en jobstart.

Efter at vi har gemt vores parameter, indeholder vores datasæt præcis det, vi har brug for – fem filer oprettet i løbet af de sidste 24 timer.

Til dette indlæg bruger jeg et tidsinterval i parameterdefinitionen i stedet for at vælge Angiv senest opdaterede datointerval. Den sidst opdaterede datointervalvælger filtrerer filer efter deres sidst ændrede datoattribut i Amazon S3. Jeg inkluderer et eksempel på at bruge det senere i dette indlæg, men det er ikke altid det samme som en dato i filnavnet. Med en parameterdefinition afspejler datoen i filen den faktiske billedoptagelsesdato, mens den sidst ændrede dato afspejler, hvornår jeg uploadede disse filer til min S3-bøtte.

  1. Vælg Opret datasæt.

Vores datasæt er nu opført på datasæt .

Opret et projekt og en opskrift for at rydde op i rådata

Udfør følgende trin for at oprette et projekt og en opskrift til at rense dataene:

  1. datasæt siden i DataBrew-konsollen, skal du vælge et datasæt.
  2. handlinger menu, vælg Opret projekt med dette datasæt.
  3. Indtast et navn til projektet (for dette indlæg, daily-images-preparation).
  4. Du kan vælge en eksisterende AWS identitets- og adgangsstyring (IAM) rolle eller opret en ny (til dette indlæg vælger vi Opret ny IAM-rolle).
  5. Vælg Opret projekt.

Vent på, at projektsessionen starter. Når den er klar, kan vi se vores data, der beskriver Mars-billeder taget i løbet af de sidste 24 timer. Hvis du ruller vandret til den sidste kolonne i visningen, kan du se vores tilføjede kolonne file_creation_date.

Denne information fra S3 nu-stien er tilgængelig for yderligere operationer som enhver anden kolonne.

Lad os definere vores opskrift nu. For nemheds skyld indeholder min opskrift kun to trin:

  • Slet kolonner, der ikke er nødvendige for min billedklassificeringsuddannelse
  • Filtrer billeder fra med manglende værdier i caption kolonne

For at lære mere om populære transformationer, se 7 mest almindelige dataforberedelsestransformationer i AWS Glue DataBrew og Opskrift handling reference.

Opret og planlæg et job

Nu hvor vores opskrift er klar, kan vi oprette et job, der anvender denne opskrift på vores daily-images-info datasæt. Denne proces adskiller sig heller ikke mellem dynamiske og ikke-dynamiske datasæt.

  1. Vælg i vores rude med opskriftsdetaljer Skab job.
  2. Til Job navn, indtast et navn.
  3. Under Indstillinger for joboutput, indtast outputstedet for vores behandlede data.
  4. Udvid Tilknyttede tidsplaner Og vælg Opret tidsplan.
  5. Til Tidsplanens navn¸ indtast et navn.
  6. Til Kør frekvens, vælg På et bestemt tidspunkt.
  7. For dette indlæg skal du konfigurere jobbet til at køre kl. 11:59 hver dag.
  8. Til Rollenavn, vælg Opret ny rolle at oprette en rolle med adgang til at skrive det forberedte output til Amazon S3.
  9. Vælg Skab job.

Vi vælger ikke Opret og kør job fordi vi ikke ønsker at starte vores dataforberedelsesjob endnu; det kører efter en tidsplan.

Når jobbet kører i henhold til tidsplanen, producerer det det forberedte output med en daglig portion data, som vist på det følgende skærmbillede af min S3-outputplacering.

Andre anvendelsesmuligheder for DataBrew dynamiske datasæt

I dette afsnit diskuterer vi andre use cases, hvor parameteriserede dynamiske datasæt kan være nyttige.

Indfang information fra Amazon S3 og gør den tilgængelig i dit datasæt

I det første eksempel på dette indlæg konfigurerede jeg file_creation_date parameter, der skal tilføjes som en kolonne. Dine data kunne have endnu mere nyttig information, der er tilgængelig som en del af S3-stien i stedet for som en kolonne i din inputfil. Lad os f.eks. sige, at vi har vores inputfiler placeret på tværs af flere mapper:

s3://bucket-name/input/EMEA/France/cases-2021-04-18.json
s3://bucket-name/input/APAC/Thailand/cases-2021-04-16.json
...

Mens vi behandler sådanne input, skal vi muligvis samle alle disse filer, men stadig holde styr på, hvilke mapper og filer disse data kommer fra. Vi kan bruge tre parametre til at parametrere S3-placeringen:

s3://bucket-name/input/{region}/{country}/cases-{report-date}.json

Vi definerer de to første parametre som strengtypen og definerer report-date som datotypen med den foruddefinerede yyyy-MM-dd datoformat. For alle disse parametre bør vi vælge Tilføj som kolonne.

Nu, ud over de originale kolonner, er tre nye kolonner tilgængelige i dit datasæt. Du kan ikke kun bruge disse kolonner til filtrering og transformationer i dine opskriftstrin, men også bruge dem til at partitionere output, så din opskriftsjobfilstruktur ligner dit input.

Match flere filer på tværs af forskellige mapper uden at bruge regulære udtrykssyntaks

En alternativ måde at parametrere S3-placeringen i DataBrew-datasæt på er ved at bruge regulære udtryk som følgende: s3://bucket-name/performance/product-<[A-Z]+>/node-<d{1,4}>-metrics.json.

Det er dog ikke alle brugere, der er komfortable med at skrive syntaktisk korrekte regulære udtryk for at vælge nødvendige filer og frafiltrere filer, der bør udelukkes. Med de tilpassede parametre for dynamiske datasæt kan du vælge den rigtige parametertype og anvende et af de medfølgende filtre. For numeriske parametre kan du f.eks. vælge mellem de muligheder, der vises på det følgende skærmbillede.

For parametre af typen String kan du vælge blandt betingelserne i det følgende skærmbillede.

Du kan bruge brugerdefinerede parametre defineret på en sådan måde i S3-placeringen i stedet for regulære udtryk. For eksempel, s3://bucket-name/performance/product-{product_code}node-{node number}metrics.json.

Filtrer filer efter den sidst ændrede attribut i Amazon S3

I mit første eksempel viste jeg, hvordan man vælger DataBrew-datasætfiler baseret på den dato, der er indkapslet i S3-filstien. I andre scenarier foretrækker du måske at stole på Sidst ændret filattribut i Amazon S3 og brug den til filtrering i stedet for. For at gøre dette skal du vælge Angiv senest opdaterede datointerval og enten brug et af de foruddefinerede relative områder eller specificer dit eget relative eller absolutte område ved at vælge Tilpasset.

Begræns datasætfiler med et antal af de seneste eller ældste filer på en placering

Et andet tilfælde er, når S3-placeringen eller sættet af matchende filer indeholder flere filer, men du kun er interesseret i en eller flere seneste eller ældste filer. I dette scenarie skal du vælge Angiv antallet af filer, der skal inkluderes under Vælg filtrerede filer og angiv, om du vil have de nyeste eller ældste filer, og hvor mange.

Denne grænse anvendes oven på allerede matchende filer, uanset om det er en mappe eller en parametreret placering.

Konklusion

DataBrew er et visuelt dataforberedelsesværktøj, der giver dig mulighed for at rense og normalisere data uden at skrive kode. Funktionen for dynamiske datasæt beskrevet i dette indlæg og muligheden for at planlægge dine job gør det nemmere at inkludere dette dataforberedelsestrin i hele din databehandlingscyklus, så dit datasæt, opskrift og job defineres én gang og bruges gentagne gange til kommende data .

Derudover kan du ansætte Amazon Eventbridge regler for at videresende DataBrew-output til en anden tjeneste, efter at et opskriftsjob er kørt. For et eksempel, se Opsætning af automatiserede datakvalitetsarbejdsgange og advarsler ved hjælp af AWS Glue DataBrew og AWS Lambda. Sammen med DataBrew-jobplanlægning kan dette automatisere dine dataforberedelsesopgaver.


Om forfatteren

Mikhail Smirnov er en senior softwareingeniør, der arbejder på AWS Glue DataBrew. Hans tidligere erfaring omfatter ledende brugeroplevelsesudvikling for Amazon Lex og Amazon Comprehend. Når han ikke arbejder, kan Mikhail godt lide at forbedre sine evner til at spille guitar og tilbringe tid med sine børn.

Kilde: https://aws.amazon.com/blogs/big-data/simplify-incoming-data-ingestion-with-dynamic-parameterized-datasets-in-aws-glue-databrew/

Tidsstempel:

Mere fra AWS