Zenit St Petersburg have signed Barcelona winger Malcom for a fee of €40 million (£36.5m/$44.5m), plus €5 million (£4.6m/$5.6m) in add-ons.
The Brazilian leaves the Camp Nou just a year after joining the club from French side Bordeaux.
The 22-year-old made 24 appearances in all competitions for Ernesto Valverde's side last season, scoring four goals.
The La Liga champions say they will be due a percentage of any fee should Zenit sell Malcom in the future.
Goal reported on Thursday that Malcom will earn around €6.5 million (£5.9m/$7.2m) per season in Russia.
Next Match
He leaves Barca having helped the club win the La Liga title and the Supercopa de Espana during his sole season in Catalonia.
Barca fought off strong competition from Italian side Roma to sign Malcom for €41 million in July 2018.
However, he struggled to force his way into a side already well stocked with attacking players.
The presence of Lionel Messi, Luis Suarez, Ousmane Dembele and Philippe Coutinho meant Malcom’s first-team opportunities were limited.
The summer signing of Antoine Griezmann from Atletico Madrid pushed him further down the Camp Nou pecking order, while Paris Saint-Germain star Neymar continues to be linked with a return to his former club.
As a result Barca took the decision to let Malcom leave this window in search of regular first-team football.
The forward had a €180m release clause in his contract, but Barcelona made it clear that they would be happy to sell the winger should anyone offer more than the €41m fee spent on him last summer.
Premier League side Everton and Bundesliga outfit Borussia Dortmund were also believed to be interested in Malcom but Zenit have won the race.
Malcom began his career at Corinthians in his native Brazil in 2014 before joining Bordeaux in two years later.
He scored 23 goals in 96 appearances across all competitions for the Ligue 1 side before his move to the Camp Nou last summer.
The forward, who has been capped at under-20 and under-23 level, was called up to the senior Brazil squad for the first time for games against Saudi Arabia and Argentina in September last year but did not make it onto the pitch.