Powered by AppSignal & Oban Pro
Would you like to see your link here? Contact us

Ingest Data

livebook/ingest-data.livemd

Ingest Data

Mix.install([
  {:explorer, "~> 0.10.1"},
  {:kino, "~> 0.15"},
  {:tama_ex, github: "upmaru/tama-ex"}
])

Setup Client

alias TamaEx.Neural
alias TamaEx.Perception
alias TamaEx.Memory

provision = TamaEx.client(base_url: "http://localhost:4000/provision")
ingest = TamaEx.client(base_url: "http://localhost:4000/ingest")

{:ok, movie_db_space} = Neural.get_space(provision, "movie-db")

{:ok, movie_details_class} = 
  Neural.get_class(provision, movie_db_space, "movie-details")

Load dataset

alias Explorer.DataFrame
alias Explorer.Series

require Explorer.DataFrame

df =
  Kino.FS.file_path("movies.json")
  |> DataFrame.from_ndjson!()

df = DataFrame.mutate(df,
  release_date: Series.cast(release_date, :date)
)

df =
  df
  |> DataFrame.filter(year(release_date) >= 2020)
  |> DataFrame.filter(not(adult))
  |> DataFrame.filter(status == "Released")
  |> DataFrame.filter(lengths(split(overview, " ")) > 5)
  |> DataFrame.sort_by(desc: popularity)

stream =
  DataFrame.to_rows_stream(df, atom_keys: true, chunk_size: 500)

Push into Tama

movies =
  stream
  |> Enum.take(5)

movies
|> Enum.map(fn movie ->
  attrs = %{
    identifier: "#{movie.id}",
    record: movie
  }

  Memory.create_entity(ingest, movie_details_class, attrs)
end)