Как избежать сохранения этого файла при переходе с AWS на Azure DataLake? - PullRequest
0 голосов
/ 22 мая 2018

Я пишу функцию Azure, которая перемещает файлы из AWS S3 в Azure Datalake, загрузка загружена, загрузка загружена, но я пытаюсь собрать их вместе, потому что не хочу сохранять файл впромежуточное приложение, так сказать, поскольку самой функции Azure не нужно хранить ее, просто передайте ее.

Это не так просто объяснить, поэтому, пожалуйста, потерпите немного здесь, пока я пытаюсь объяснить, что я хочуdo.

Когда я загружаю из S3 с использованием этого кода

await client.GetObjectAsync(new GetObjectRequest { BucketName = bucketName, Key = entry.Key });

У меня нет файловой системы для ее хранения, и я не хочу ее хранить, я хочу еекак некий «объект», который я могу передать непосредственно устройству записи озера данных Azure, которое выглядит следующим образом:

adlsFileSystemClient.FileSystem.UploadFile(adlsAccountName, source, destination, 1, false, true);

Код работает нормально, если я загружаю его на свой локальный диск, а затем загружаю его, ноэто не то, что я хочу, так как у функции azure нет памяти. Я хочу передать загруженный объект непосредственно загрузчику, так сказать

Как мне этого добиться?

**** EDIT ****

// Process the response.
                    foreach (S3Object entry in response.S3Objects)
                    {
                        Console.WriteLine("key = {0} size = {1}", entry.Key.Split('/').Last(), entry.Size);
                        string fileNameOnly = entry.Key.Split('/').Last();

                        //await client.GetObjectAsync(new GetObjectRequest { BucketName = bucketName, Key = entry.Key });
                        GetObjectResponse getObjRespone = await client.GetObjectAsync(bucketName, entry.Key);
                        MemoryStream stream = new MemoryStream();
                        getObjRespone.ResponseStream.CopyTo(stream);

                        if (entry.Key.Contains("MerchandiseHierarchy") == true)
                        {
                            WriteToAzureDataLake(stream, @"/PIMRAW/MerchandiseHierarchy/" + fileNameOnly);
                        }
                    }

и затем я передаю поток памяти методу azure, но мне нужен потоковый загрузчик, и я не могу его найти, следующее жалуется, что не может преобразовать поток в строку

adlsFileSystemClient.FileSystem.UploadFile(adlsAccountName, source, destination, 1, false, true);

* РЕДАКТИРОВАТЬ2 *

Измените метод загрузки следующим образом, и он создаст файл в месте назначения, но с размером 0, поэтому мне интересно, создаю ли я его до загрузки?

static void WriteToAzureDataLake(MemoryStream inputSource, string inputDestination)
        {

            // 1. Set Synchronization Context
            SynchronizationContext.SetSynchronizationContext(new SynchronizationContext());

            // 2. Create credentials to authenticate requests as an Active Directory application
            var clientCredential = new ClientCredential(clientId, clientSecret);

            var creds = ApplicationTokenProvider.LoginSilentAsync(tenantId, clientCredential).Result;

            // 2. Initialise Data Lake Store File System Client
            adlsFileSystemClient = new DataLakeStoreFileSystemManagementClient(creds);

            // 3. Upload a file to the Data Lake Store
            //var source = @"c:\nwsys\source.txt";
            var source = inputSource;

            //var destination = "/PIMRAW/MerchandiseHierarchy/destination.txt";
            var destination = inputDestination;

            //adlsFileSystemClient.FileSystem.UploadFile(adlsAccountName, source, destination, 1, false, true);
            adlsFileSystemClient.FileSystem.Create(adlsAccountName, destination, source);


            // FINISHED
            Console.WriteLine("6. Finished!");

        }

1 Ответ

0 голосов
/ 22 мая 2018

Измените метод загрузки следующим образом, и он создаст файл в месте назначения, но с размером 0

Кажется, что необходимо установить позицию потока в 0 перед записью в datalake.

stream.Position = 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...