Skip to main content
Version: 2.0
🕑Estimated time for completion

This section takes about 5 minutes to complete.

The Multi-Hop/Medallion Architecture, Applied

Recall that the Multi-Hop/Medallion Architecture comprises 3 stages: Bronze, Silver, and Gold.

bronze-silver-gold.png

In this section, we'll talk about how to take our domain questions and organise what the input and outputs are of each hop.

Applying the domain​

Let's bring back the domain questions from our earlier exercises and the steps taken to answer them:

1. When was the last connection time of a Charge Point?2. What is the final charge time and final charge dispense for every completed transaction?
Read Data with a SchemaRead OCPP Data (data.csv)
Time ConversionReturn only StopTransaction Requests (filter)
Windows and RowsUnpack JSON in StopTransaction Request (withColumn, from_json)
CleanupUnpack StartTransaction Response (withColumn, from_json)
Unpack StartTransaction Request (withColumn, from_json)
Find the matching StartTransaction Requests (inner join)
Join Start and Stop data (left join)
Convert the start_timestamp and stop_timestamp fields to timestamp type (to_timestamp, withColumn)
Calculate the Charge Transaction Duration (total_time) (withColumn, cast, maths)
Calculate total_energy (withColumn, cast)
Unpack JSON in MeterValues Request (withColumn, from_json)
Calculate total_parking_time (explode, filter, window, groupBy)
Join with Target DataFrame (left join)
All together now! (select)

Note: there are some non-business case transformations that could be relevant to both use cases (or new ones) or just good curation/cleanup activities in preparation for further transformation:

  • Read from a data source (in this case a csv)
  • Unpack from string to JSON
  • Flatten (unpack nested structures and bring to top level)
  • Casting ambiguous columns to types

Thinking back to the multi-hop (Bronze, Silver, Gold) architecture we can re-organise our transformation into the following stages:

BronzeSilver
Read from data source (raw) and storeUnpack from string to JSON
Flatten (unpack nested structures and bring to top level)
Casting ambiguous columns to types

And of course, the Gold transformation Step will feature various transformations required to answer one of our domain questions

Gold (1) When was the last connection time of a Charge Point?Gold (2) What is the final charge time and final charge dispense for every completed transaction?
Windows and RowsFind all StopTransaction (filter)
CleanupJoin with StartTransaction Responses, matching on transaction_id (left join)
Find the matching StartTransaction Requests (inner join)
Calculate the total_time (withColumn, cast, maths)
Calculate total_energy (withColumn, cast)
Calculate total_parking_time (explode, filter, window, groupBy)
Join and Shape (left join, select)